fuz*_*zzy 3 c string pointers cstring
在下面的代码我输出像(最后一个给出分段错误)
U
s
HelloThisisatest
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么.代码是
int main()
{
char *a[]={"Hello" "This" "is" "a" "test"};
printf("%c\n",a[1][0]);
printf("%c\n",a[0][8]);
printf("%s\n",a[0]);
printf("%s\n",a[3]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
另一个问题是我们可以在不使用逗号的情况下初始化二维数组吗?当我用\ns 替换\ts然后输出变化时,我得到的另一种情况
"你的HelloThisisatest(null)"
为什么?
pho*_*xis 11
这是因为在C中,两个相邻的字符串连接成一个.所以"Hello""World"实际上是单个字符串"HelloWorld".
在您的情况下,指针数组实际上包含一个单独的字符串"HelloThisisatest".在第一个printf中,您正在访问位置1,这是未定义的行为.
下一个printf访问字符串的字符8 s.
第三个printf打印存储在该位置的整个字符串0,即"HelloThisisatest"
最后一个printf尝试访问阵列位置3,这是未定义的行为,因为它未初始化.
编辑
参见C11/C99标准第5.1.1.2节第6段,其中说明:
相邻的字符串文字标记是连接的.
| 归档时间: |
|
| 查看次数: |
605 次 |
| 最近记录: |