【发布时间】:2015-02-03 08:17:53
【问题描述】:
我目前遇到了段错误,但我似乎无法弄清楚为什么...... 我正在制作一个连接字符串值的代码:
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没有做你认为的事情。 -
它不计算字节数吗?这不是我在尝试将堆中的内存分配给“newstring”时想要的吗?
-
它在编译时产生(除了这里不存在的晦涩的极端情况),您传入的类型的大小。
strs是char**,所以@987654326 @ 是char*,它的大小是指针的大小。要知道 C 中字符串的长度,请使用strlen(),它实际上会将字符计数到字符串的末尾。
标签: c string pointers segmentation-fault