【发布时间】:2020-06-22 04:50:43
【问题描述】:
为什么当我尝试运行此代码时代码块会崩溃:
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
char *ch= "Sam smith";
printf("%s\n",*ch);
}
但是当我在 printf 中删除 *ch 并用这样的 ch 替换它时它工作正常
void main(void)
{
char *ch= "Sam smith";
printf("%s\n",ch);
}
不应该*ch表示ch指向的地址的内容,即字符串本身,ch表示字符串中第一个元素的地址?所以我的预期正好相反!
我在 windows 8.1 上使用代码块 17.12,gcc 版本 5.1.0。
【问题讨论】:
-
改用
"%c\n" -
%c 只会打印一个字符
-
*ch不是指针,它是字符串中的第一个元素,单个字符。 -
如果只提供1个字符,为什么要打印更多?
printf怎么会知道有一个字符串要打印更多字符? -
您似乎忘记启用一组好的警告。对于 GCC,我建议至少
-Wall -Wextra;还可以考虑-Wpedantic -Warray-bounds来识别其他一些常见错误。