为什么这样起作用:指向C字符串的指针数组?

恩里

为什么*(string + i)在打印完所有字符串后都无法通过这种检查printf("%p", string + i + 1);绝对显示的输出string + i + 1不是NULL。
我已经用数个字符串尝试了几次此代码。
也许某些C大师可以对此给出答案?提前致谢。:-)

代码:

#include <stdio.h>

int
main(void)
{
        size_t i;
        char *string[] = {
                "Hey, baby!",
                "How are ya?",
                "What the heck is going on in here?"
        };

        for (i = 0; *(string + i); ++i)
        {
                printf("%s\t%p\n", *(string + i), string + i);
        }

        printf("%p", string + i + 1);

        return 0;
}

输出:

[aenry@MintK50ID 2]$ ./test   
Hey, baby!  0x7fff691978e0
How are ya? 0x7fff691978e8
What the heck is going on in here?  0x7fff691978f0
0x7fff69197900%

[aenry@MintK50ID 2]$ gcc -v   
...
gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu9)

--------编辑:原来,这确实是垃圾代码,并且gcc只能以某种方式编译它。UB纳夫说。谢谢你们。

巴拉克的手

您不能指望它能起作用:for (i = 0; *(string + i); ++i)

每个字符串以0字符结尾的事实并不意味着字符串数组以NULL指针结尾

所以*(string + i)是非法的内存访问,一旦i变得比2大。

将以上内容更改为:for (i=0; i<sizeof(string)/sizeof(*string); ++i)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C - 指向字符串数组的指针不起作用

为什么在C中有一个指向字符串数组的指针

指向二维数组的指针(为什么起作用)

为什么指向数组表达式的指针起作用

指向C ++中的字符串指针数组的指针

为什么字符串指针不指向首地址?

c指向字符串数组的指针数组

指向字符串数组的指针数组

指向字符串字符的指针数组

为什么指向c字符串中的元素的指针不只返回该元素?

返回指向字符串数组C的指针

指向字符串的指针数组中的C char qsort

c ++指向字符串和append()方法的指针数组

指向字符串数组的指针

指向字符串的指针数组

c字符串数组和指针传递方法不起作用

指向字符串的C数组,从指针传递字符串

为什么scanf在直接输入字符串时将字符串放入char数组不起作用?

为什么nestjs swargger字符串数组不起作用

Java数组-字符串也放在哪里?为什么不起作用?

指向子字符串的C ++指针

当delete []指针起作用时,为什么不能获得所指向的数组的大小?

为什么不能重新分配字符串数组,但是字符串指针可以使用C语言?

为什么我的字符串比较不起作用?

为什么字符串搜索不起作用?

为什么我的连接字符串不起作用?

为什么$ @在传递字符串时不起作用?

指向字符串的指针、字符数组和指向字符数组的指针的比较

在C中使用字符串的双指针/使用malloc指向数组的指针