我正在尝试编写一个类似于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/

10-12 15:03
查看更多