2015-09-16 2 views
-1

Итак, в строке 28 я создаю c-строку под названием temp. Я назначаю значение temp [0] для значения string [index]. Теперь я хочу добавить строку до конца temp, а затем создать строку, хранящую те же значения, что и temp. Я попытался использовать strcat(), но он дает мне «переполнение буфера». Есть ли какие-либо другие решения, которые я могу попробовать, в основном все, что я хочу, это «string = string [index] + string», если только это возможно в C. Мне нужна программа для запуска с определенной скоростью, поэтому я не хочу использовать цикл, чтобы исправить это.Как я могу вставить один символ перед моей строкой c?

//Problem  : Expecto Palindronum 
//Language  : C 
//Compiled Using : GCC 
//Version  : GCC 4.9.1 
//Input for your program will be provided from STDIN 
//Print out all output from your program to STDOUT 

#include <stdio.h> 
#include <string.h> 

int main() { 
    char string[202]; 
    char revstring[202]; 
    gets(string); 
    int ilength = strlen(string); 
    int index = ilength - 1; 
    int i; 
    for(i = 0; i<(ilength);i++){ 
     int y = index - i; 
     revstring[i] = string[y]; 
    } 
    while(1==1){ 
     int length = strlen(string); 
     if(strcmp(revstring,string)==0){ 
      printf("%d",length); 
      break; 
     }else{ 
      char temp[202]; 
      int y; 
      temp[0] = string[index]; 
      strcat(temp,string); //gives me buffer overflow, any solution to this? 
      //for(y = 0; y < (length); y++){ //my failed loop 
       //temp[y+1] = string[y]; 
      //} 
      int ind = length - index - 1; 
      revstring[length] = revstring[ind]; 
      memcpy(string,temp,202); 
     } 
    } 
    return 0; 
} 
+1

«Мне нужна программа для работы с определенной скоростью, поэтому я не хочу использовать цикл, чтобы исправить это». Ummmm ... вы имеете в виду, что ваше назначение ограничивает вас менее чем O (n)? Потому что в противном случае я нахожу невозможным представить себе, что фактические ограничения производительности будут иметь значение таким образом. Несколько сотен ничтожных наносекунд не собираются убивать вас. –

+0

@NathanTuggy хорошо я попробовал его с циклом раньше, и я получил строку, чтобы быть тем, кем я ее хотел, но решение было слишком медленным, чтобы быть приемлемым. –

+0

Включите этот код! Вероятно, существует некоторое патологическое поведение, но это должно быть достаточно простым для оптимизации. –

ответ

2

С вашим кодом связано множество проблем. Я просто рассмотрю вопрос о переполнении буфера (seg fault).

от человека strcat:

Функция strcat() добавляет Src строку в строку Dest, перезапись завершающего нулевого байта («\ 0») в конце Dest, а затем добавляет завершающий нулевой байт ,

Но у вас нет конечного нулевого байта в конце dest. Чтобы исправить возникшую проблему:

temp[0] = string[index]; 
temp[1] = 0; 

Что еще я должен упомянуть?

от человека получает:

Bugs: Никогда не используйте получает(). Потому что невозможно сказать, не зная заранее данные, сколько символов будет получать(), и потому что gets() будет продолжать хранить символы, находящиеся за концом буфера, крайне опасно использовать. Он используется для защиты компьютерной безопасности. Вместо этого используйте fgets().

Подробнее о нулевых концах строк.

 Смежные вопросы

  • Нет связанных вопросов^_^