c - 为什么此 printf 显示多个数组元素?

标签 c pointers

char names[][2] = {"abcdefg", "hijklmn", "qrstuv"};
printf("%c\n",*(*(names+0)+0));
printf("%s\n",names);

此代码的最后一行打印abhiqr。但是,更改“2”将使程序打印每个数组字符串中的 n 个字符(即 abchijqrs)。

为什么会这样?

此外,在中间那条线上,我不明白为什么我有一个理论:我需要两个间接操作,因为 names 实际上是指向其他指针(数组)的指针,第一个解引用让我 STILL 用指针?

我可以使用哪些资源来详细阅读有关 C 指针的信息?

最佳答案

这一行看起来不对:

char names[][2] = {"abcdefg", "hijklmn", "qrstuv"};

不应该是:

char names[][7+1] = {"abcdefg", "hijklmn", "qrstuv"};

因为是(char names[][2]),所以会初始化如下:

           01?????
name[0] = "abcdefg";
             ^
             Buffer overflow; name[1] points here... 


           01?????
name[1] = "hijklmn";
             ^
             Buffer overflow; name[2] points here...

           01????
name[2] = "qrstuv";
             ^
             Buffer overflow; name[3] points here....

关于c - 为什么此 printf 显示多个数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23553872/

相关文章:

c - Intel i5 处理器中的线程数

c - strtok() 在 C99 中返回错误值?

c - C中的段错误,无法找出原因

c - 从 C-DLL 函数读取 MATLAB 中的 int 和字符串数组

c - 我需要一个带有 C 语言字符串的输入

c - 线程池如何在 C 中创建带队列的线程池?

c - 如何将单词插入简单的哈希函数 C

C++ - 指向模板结构数组的指针

go - 使用不安全指针从 []string 获取值

c - 将指针传递给结构体数组