1

我写了一些不想工作的代码,经过深思熟虑,我决定我所有麻烦的原因是一个试图将字符串复制到数组的循环,它是结构的一个组成部分,由传递给函数的指针指向。这不完全是我的代码,但不管是什么使它不起作用也使我的代码不起作用:

typedef struct {
        int A[100];
        } thing;

这有点像我正在使用的结构。

然后在 main 函数中:

thing *s;
int i;
for (i=0;i<5;i++) {
    s->A[i]=i;
}

所以,这行不通。然而,令我沮丧和困惑的是,这确实:

thing *s;
s->A[0]=0;
s->A[1]=1;
s->A[2]=2;
s->A[3]=3;
s->A[4]=4;

关于这一点,我很茫然,并且确实花了很多时间试图为自己找到解决方案。我知道我在这里遗漏了一些东西,我只是希望它不明显

4

1 回答 1

3

那是未定义的行为;该指针后面没有对象——结果可以是任何东西。未定义的行为可能看起来有效,也可能以非常神秘的方式失败。

你可以这样处理它:

thing th;
thing* s = &th;
...now 's' points to a 'thing' -- specifically, 'th'.
于 2012-09-10T07:57:38.430 回答