gpt4 book ai didi

c - 尝试解决在 C 中连接字符串的问题

转载 作者:行者123 更新时间:2023-12-01 21:59:03 24 4
gpt4 key购买 nike

我正在尝试将两个字符串连接在一起。我将两个字符串放入两个数组中,并创建了第三个数组,该数组的大小与这两个字符串相同。然后我使用 for 循环一次打印出一个字母。

程序在崩溃前到达This。 IDE 中没有错误代码或调试消息!!!如果发生这种情况时没有明显的错误消息可以解决,我应该如何调试我的程序以及我应该有什么样的心态?

#include <stdio.h>
#include <memory.h>
#include <malloc.h>

int pointerArrays() {
char strOne[] = {"This is the first string array."};
char strTwo[] = {"This is the second string array."};

char *px, *py, *pz;
px = strOne;
py = strTwo;
pz = (char *) malloc(1 + sizeof(px) + sizeof(py));
strcpy(pz, px);
strcpy(pz, py);

for (int i = 0; i < sizeof(pz); i++) {
printf("%c", pz[i]);
}
return 0;


}

int main(void) {

pointerArrays();
return 0;
}

最佳答案

有两个问题。首先,这在这里不起作用:

malloc(1 + sizeof(px) + sizeof(py));

sizeof(px) 不会评估字符串的大小,它只会评估 char* 的大小,这不是您想要的.相反,尝试这样的事情:

pz = (char *)malloc(strlen(strOne) + strlen(strTwo) + 1);

第二个问题是,您不是连接两个字符串,而是将它们相互复制。第二次调用需要

strcat(pz, py);

而不是再次使用 strcpy

附带说明一下,当您打印一个字符串时,您也可以只使用 %s 格式说明符,而不仅仅是遍历数组:

printf("%s", pz);

最后但同样重要的是,完成后不要忘记释放内存:

free(pz);

关于c - 尝试解决在 C 中连接字符串的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54421751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com