c - 函数内部使用malloc形成字符串时的段错误(11)

标签 c string segmentation-fault malloc c-strings

我正在尝试使用一个函数来分配空间并用字符填充该空间(或至少部分空间)以形成一个字符串。在该函数中,我调用了 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/

相关文章:

c - C 中的指针与类型转换

Java 正则表达式验证

segmentation-fault - EXPECT_CALL 上的 gmock 段错误

c++ - 奇怪的段错误和valgrind分析

python - 编写数论程序

c - 遍历C指针列表: weird printf behaviour

c - C程序执行后的backtrace和memory map是什么

python - 将字符串转换为 numpy 字符串数组

javascript - 字符串增量 : increment the last string by one

c - binning/jack-knife c 程序中的段错误