所以在第28行,我创建一个名为temp的c字符串。我将temp [0]的值赋给string [index]的值。现在我想在temp的末尾添加字符串,然后使字符串存储与temp相同的值。我尝试使用strcat()
,但它给了我一个"检测到的缓冲区溢出"。有没有我可以尝试的其他解决方案,基本上我想要的是" string = string [index] + string"如果只有那可能在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;
}
答案 0 :(得分:2)
您的代码存在很多问题。我将解决有关缓冲区溢出(seg fault)的问题。
来自man strcat:
strcat()函数将src字符串附加到dest字符串,覆盖dest末尾的终止空字节('\ 0'),然后添加一个终止空字节。
但是你在dest的末尾没有终止空字节。解决眼前的问题:
temp[0] = string[index];
temp[1] = 0;
我还应该提到什么?
来自男人:
错误:永远不要使用gets()。因为在不事先知道数据的情况下无法判断get()将读取多少个字符,并且因为gets()将继续存储超出缓冲区末尾的字符,所以使用它是非常危险的。它已被用来打破计算机安全。请改用fgets()。
了解空终止字符串。