用 c 中的数组构造我自己的 strcat 函数

标签 c arrays string pointers strcat

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

相关文章:

Java 在 BigInteger 中存储字符串

c++ - BITCOUNT 宏需要解释

c - 如何将 C 控制台应用程序附加到正在运行的进程

c - 读取链表节点内的字符数组?

python - 每天精确小时的值数组(5 天)

c - 乐高头脑 Storm NXT、NXC : Error in replacing elements in an array (no matter the dimension)

c++ - 如何加快程序的启动速度

java - 如何检查包含字符串的数组是否包含另一个字符串数组中的某些单词

c - 用可变数量的参数构建一个字符串

python - 使用列表中的字符串进行切片分配