gpt4 book ai didi

c - 段错误 11 错误输出

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:00 25 4
gpt4 key购买 nike

我目前遇到段错误,我似乎无法弄清楚为什么......我正在制作一个连接字符串值的代码:

char* concat(char** strs, unsigned int nstrs)
{
char* newstring;
int length = 0;
int j;
int charcount;
int strcount;
int k = 0;
for (j = 0; j <= nstrs - 1; j++) {
length = sizeof(strs[j]) + length;
}
newstring = malloc(length);
for (strcount = 0; strcount <= nstrs - 1; strcount++) {
for (charcount = 0; charcount <= strlen(strs[strcount]) - 1; charcount++) {
newstring[k] = strs[charcount][strcount];
k++;
}
}
return newstring;

在我的主要功能中我有...

  char* introname[] = {"My", "name", "is", "Trill-o"};
printf("%s\n", concat(introname, 4));

最佳答案

在你的代码中,你需要改变

sizeof(strs[j])

strlen(strs[j])

永远记住,sizeof 不是函数,而是运算符。它返回所提供的数据类型 的大小。在您的代码中,strs[j]char * 类型,因此 sizeof 将返回一个等于 sizeof(char * )

要获取字符串长度,您必须使用strlen()

也就是说,请注意,strlen() 不包括终止 null 的计数。因此,在 malloc() 中使用 length 时,您必须为多一个字节添加空间,例如

  newstring = malloc(length + 1);    // 1 more byte for storing the terminating null.

此外,您必须检查malloc() 的返回值以确保成功。如果 malloc() 失败,它将返回 NULL 并且随后使用 newstring 将导致 UB。

按照逻辑部分,你的代码应该是这样的

 newstring[k] = strs[strcount][charcount];

并正确终止字符串

newstring[k] = '\0' ;

for 循环之外。

关于c - 段错误 11 错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28294213/

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