指针到指针算术的行为不符合预期

时间:2017-10-08 01:08:03

标签: c arrays pointers segmentation-fault pointer-to-pointer

我有下面的代码,无法理解为什么它是segfaulting。我在哪里弄乱了。我正在尝试学习如何访问/修改char **。谢谢!

#include <stdio.h>
#include <stdlib.h>

int main() {
    char * wordPtr;
    char **wordPtrPtr = &wordPtr;
    *wordPtrPtr = (char *) malloc(3 * sizeof(char));

    *wordPtrPtr[0] = 'A';
    *wordPtrPtr[1] = 'B';
    *wordPtrPtr[2] = '\0';

    printf("%s\n", *wordPtrPtr);

    return 0;
}

2 个答案:

答案 0 :(得分:1)

留意operator precedence。在访问数组元素之前,您需要先取消引用wordPtrPtr

(*wordPtrPtr)[0] = 'A';
(*wordPtrPtr)[1] = 'B';
(*wordPtrPtr)[2] = '\0';

答案 1 :(得分:1)

您也可以尝试这样的事情

 wordPtr[0] = 'A';
 wordPtr[1] = 'B';
 wordPtr[2] = '\0';

或者

*(*wordPtrPtr +0) = 'A';
*(*wordPtrPtr +1) = 'B';
*(*wordPtrPtr +2) = '\0';