我正在尝试编写一个像 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 返回不包括终止空字符的字符串长度。
例如,如果字符串是“toto”,那么 strlen(string) 是 4。
在内存中 :
string[0] = 't'
string[1] = 'o'
string[2] = 't'
string[3] = 'o'
string[4] = '\0'
但是在我的示例中,您正在 dest[z+i+1] 处写作。
string[z + 4 + 1] 就是 string[5]。
所以在'\0'之后。
结果将是:“toto\0string2”。
但是因为 printf %s 在\0 处停止读取指针,所以您只能看到“toto”。
尝试更换
dest[z+i+1]
经过
dest[z+i]
关于用 c 中的数组构造我自己的 strcat 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49192850/