我正在尝试使用一个函数来分配空间并用字符填充该空间(或至少部分空间)以形成一个字符串。在该函数中,我调用了 malloc,并在同一个函数中,我将字符分配给给定的空间。以下代码给出了我正在做的事情的一般要点:
#define INITIAL 10
int func(char **s);
int
main(int argc, char **argv) {
char *s;
int n;
n = func(&s);
printf("Done\n");
return 0;
}
int
func(char **s) {
int i;
*s = (char*)malloc(INITIAL*sizeof(char));
assert(*s);
for (i=0; i<5; i++) {
printf("i=%d\n", i);
*s[i] = 'a'; /*'a' is an arbitrary char for this example */
}
return i;
}
这段代码的输出是:
i=0
i=1
i=2
Segmentation fault: 11
我让我的函数返回一个 int 的原因是因为我最终希望函数返回我形成的字符串的长度。
我完全不确定为什么会出现段错误;似乎我已经分配了足够的空间来容纳下一个字符。它在 i=2 处停止对我来说也很奇怪。
如果有人能找出我所犯的错误,我将不胜感激!
最佳答案
代替
*s[i] = 'a';
你想要
(*s)[i] = 'a';
*s[i]
等同于 *(s[i])
。也就是说,它将 s 视为一个字符串数组,并在索引 i 处为您提供字符串的第一个字符。
关于c - 函数内部使用malloc形成字符串时的段错误(11),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32923540/