将字符串附加到字符串

我正在尝试将字符串附加到字符串。

我试过了

char *string = malloc(strlen(text) * sizeof (char)); for(i=0, i <n; i++) { j = i; while (j <= strlen(text)) { string[strlen(string)] = text[i]; j = j + n; } string[strlen(string)] = '\0'; printf("%s", string); string = ""; } 

我的目标是创建text变体。我的代码出现了分段错误。 我究竟做错了什么?

编辑:更清楚我想做的是:让我们说text =“asdfghjk”对于n = 3我想要以下输出:

 afj sgk dh 

这就是你想要的。

 // Params char *text = "asdfghjk"; int n = 3; // Code int i, j, k, len = strlen(text); char *s = malloc((len + 1) * sizeof (char)); for (i = 0, i < n; i++) { for (j = i, k = 0; j < len; j += n) s[k++] = text[j]; s[k] = 0; } printf("%s\n", s); 

首先,一个终止为零的字符串将占用strlen()+ 1个字节的空间。 不只是strlen()。 其次,不要在循环中使用strlen()。 在int中预先计算并使用它。 第三,你有一个错误:你有文字[i],但意思是文字[j]。 第四,作为前面提到的答案的作者,如果字符串还没有终止零,则无法计算字符串的长度。 第五,你不需要在每次迭代后清除一个字符串,因为覆盖它的字符并添加新的终止零将使它成为全新的字符串。

我会做的事情如下:

 char *AppendCharToString( const char *orig, char newChar ) { int oldLength = strlen(orig); char *result = malloc( oldLength+2 ); // one byte for the new char, one for the terminator strcpy(result, orig); result[oldLength] = newChar; result[oldLength+1] = 0; return result; } 

你应该只创建一个新的String,在它的底部附加`string [strlen(string)] =’\ 0′; printf(“%s”,string); string = new String(“”);

`

 string[strlen(string)] = '\0'; 

这不会按预期工作。 string不会以NULL结尾,因此strlen()将在\ 0的字符串末尾后面查找,并且不会找到它。 (如果确实如此,你会用\ 0覆盖\ 0)。 你想要的是那里的strlen(文本)。 然后

 char *string = malloc(strlen(text) + 1); 

有足够的空间。

好的回答问题,因为最初说明如何将单个字符附加到字符串的末尾,而该字符串没有为其分配空间。

 #include  #include  #include  /* note that str can be NULL for a new string */ char *straddchr(char *str, int c) { size_t len = str ? 2+strlen(str) : 2; char *p = realloc(str, len); /* add space (need space for char and \0) */ if ( !p ) return str; str = p; str[len-2] = c; str[len-1] = 0; return str; } int main() { char *str = NULL; str = malloc(5); strcpy(str, "Hell"); str = straddchr(str, 'o'); str = straddchr(str, ' '); str = straddchr(str, 'w'); str = straddchr(str, 'o'); str = straddchr(str, 'r'); str = straddchr(str, 'l'); str = straddchr(str, 'd'); printf("%s\n", str); } 

这是第二位在每个’n’位置插入一个字符

 #include  #include  #include  /* note that str can be NULL for a new string */ char *strinjectchr(char *str, int c, int n) { size_t len = str ? strlen(str) + n + 1: n + 1; str = realloc(str, len); char *p; int i; if ( len == 1+n ) { /* original string was NULL */ str[n] = 0; return memset(str, c, len-1); /* just use memset and send it all back */ } char *copy = strdup(str); for (i = 0, p = copy; *p != 0; p++) { str[i++] = *p; if ( (i > 0) && ((1+(p - copy))%n == 0) ) { str[i] = c; i++; } } str[len] = 0; free(copy); return str; } int main() { char *str = NULL; str = strinjectchr(str, 'X', 25); printf("str is: %s\n", str); str = strinjectchr(str, '-', 5); printf("str is: %s\n", str); str = strdup("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); str = strinjectchr(str, '\n', 3); printf("str is: %s\n", str); }