我正在尝试编写一个类似于strcat的函数,在编译代码时没有出现任何错误。问题是在调用函数时,它没有将第二个数组中的元素附加到第一个数组中。当我打印第一个数组时,它仍然相同。有什么建议吗?
#include <stdio.h>
#include <string.h>
char *strcat1(char *dest, char *src);
char *strcat1(char *dest, char *src) {
int i;
int j;
printf("i0=%d, j0=%d\n", i, j);
i = strlen(dest);
j = strlen(src);
for (int z = 0; z < j; z++) {
dest[z + i + 1] = src[z];
}
}
int main() {
char str1[100];
char str2[30];
printf("put the first string:\n");
fgets(str1, sizeof(str1), stdin);
printf("\ninput the second string\n");
fgets(str2, sizeof(str2), stdin);
strcat1(str1, str2);
printf("%s", str1);
}
最佳答案
str1以'\ 0'结尾。
strlen返回不包含终止空字符的字符串长度。
因此,例如,如果string为“toto”,则strlen(string)为4。
在记忆中 :
string[0] = 't'
string[1] = 'o'
string[2] = 't'
string[3] = 'o'
string[4] = '\0'
但是您在dest [z + i + 1]上进行写作,因此在我的示例中。
字符串[z + 4 +1]是字符串[5]。
因此,在'\ 0'之后。
结果将是:“toto \ 0string2”。
但是由于printf%s停止读取\ 0处的指针,因此只能看到“toto”。
尝试更换
dest[z+i+1]
通过
dest[z+i]
关于c - 用C中的数组构造我自己的strcat函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49192850/