我怎样才能在我的c字符串前面插入一个字符?

时间:2015-09-16 01:33:38

标签: c string buffer-overflow strcat

所以在第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;
}

1 个答案:

答案 0 :(得分:2)

您的代码存在很多问题。我将解决有关缓冲区溢出(seg fault)的问题。

来自man strcat:

strcat()函数将src字符串附加到dest字符串,覆盖dest末尾的终止空字节('\ 0'),然后添加一个终止空字节。

但是你在dest的末尾没有终止空字节。解决眼前的问题:

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

我还应该提到什么?

来自男人:

错误:永远不要使用gets()。因为在不事先知道数据的情况下无法判断get()将读取多少个字符,并且因为gets()将继续存储超出缓冲区末尾的字符,所以使用它是非常危险的。它已被用来打破计算机安全。请改用fgets()。

了解空终止字符串。