C将char附加到char*

Man*_*son 7 c string append char segmentation-fault

所以我试图追加char一个char*.

例如,char *word = " "; 我也有char ch = 'x';

append(word, ch);用这个方法..

void append(char* s, char c)
{

    int len = strlen(s);
    s[len] = c;
    s[len+1] = '\0';
}
Run Code Online (Sandbox Code Playgroud)

它给了我一个分段错误,我理解为什么我想.因为s[len]是出界的.我该如何制作呢?char*如果我要使用像char word [500]这样的东西,我还需要清除很多东西; 一旦附加了一些字符,我该如何清除?请问strlen它永远是500?提前致谢.

dje*_*lin 11

典型的C练习如下:

//returns 1 if failed, 0 if succeeded 
int  append(char*s, size_t size, char c) {
     if(strlen(s) + 1 >= size) {
          return 1;
     }
     int len = strlen(s);
     s[len] = c;
     s[len+1] = '\0';
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

传递函数时,一个数组来修改函数,在编译时不知道它有多少空间.C中的常规做法是传递数组的长度,如果函数不能在它所拥有的空间中完成工作,函数将信任该约束并失败.另一个选择是重新分配并返回新数组,您需要返回char*char**作为输入,但您必须仔细考虑如何在这种情况下管理堆内存.但是如果没有重新分配,是的,如果在没有空间的情况下要求追加,你的函数必须以某种方式失败,这取决于你如何失败.


Kei*_*all 5

尝试在C中就地添加字符串很难.尝试这样的事情:

char *append(const char *s, char c) {
    int len = strlen(s);
    char buf[len+2];
    strcpy(buf, s);
    buf[len] = c;
    buf[len + 1] = 0;
    return strdup(buf);
}
Run Code Online (Sandbox Code Playgroud)

完成后,请务必释放返回的字符串.

仅供参考:可能因为您传递的字符串存储在只读存储器中而导致段错误.但是你是对的,你也写完了([len+1]写,而不是写[len]).