我写了一些代码来测试指针数组是否按我的方式工作
预期。然后我得到了这个有线结果-在分配了第三个指针之后,指针数组全部指向最后一个字符串。任何人都可以解释发生了什么事?谢谢。

#include <string.h>
#include <stdio.h>

main() {

    char *pstr[10];
    char p[10];
    char *s1 = "morning";
    char s2[10] = {'h','e','l','l','o'};
    char s3[10] = {'g','o','o','d'};
    int i = 0;

    strcpy(p, s1);
    pstr[0] = p;
    printf("%s\n", pstr[0]);

    strcpy(p, s2);
    pstr[1] = p;
    printf("%s\n", pstr[1]);

    strcpy(p, s3);
    pstr[2] = p;
    printf("%s\n", pstr[2]);

    for (i = 0; i < 3; i++)
        printf("%s\n", pstr[i]);
}

该程序的输出为:
morning
hello
good
good
good
good

最佳答案

您已将pstr[0]pstr[1]pstr[2]设置为等于p。写入p的最后一件事是字节序列"good"。因此,最后,您实际上将打印p 3次。

关于c - 混淆结果:C语言中的指针数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6652916/

10-10 01:01