俊熙君 2022-11-09 23:03 采纳率: 85.7%
浏览 55
已结题

C语言无法正常打印字符串

问题遇到的现象和发生背景

C语言 输入并输出字符串 无法正常输出

用代码块功能插入代码,请勿粘贴截图

void main()
{
char *str[50];

str[0] = "40";
str[1] = getchar();

puts(str[0]);
puts(str[1]);

}

运行结果及报错内容

img

  • 写回答

4条回答 默认 最新

  • 谢玄. 2022-11-09 23:53
    关注

    很简单的一个问题
    首先你需要知道以下几点:

    • 字符串以 '\0' 结尾
    • 如果有一个类型为 char a[50]; 你输入 a 则返回的是 &a[0] ,也就是第0位的地址
    • char *str = "aa"; 我们一般认为str 是常量字符串,在程序中不应该去修改。

    也就是说 , 你用scanf输入 scanf("%s",a); 等同于 scanf("%s",&a[0]);
    输入字符串使用的函数也有 gets 这个会读入空格等 直到你输入了回车
    get(a);

    还有 char *str[50] 的意思是定义一个 指针列表,如果你要定义的是字符串的话应该是 char str[50];
    char *str = "aaa"; 确实可以定义一个字符串,只不过我们一般认为这个字符串为常量字符串,是不支持修改的。
    而没有初始化的指针是不能对他进行赋值的操作的。
    比如 char *str; scanf("%s",str);这样子我们认为这个输入实际上是溢出了,会有难以预计的后果。
    如果你是需要有 50 个字符串呢,建议使用
    chat str[50][50] = {0}; 这种方式去定义。而不是 char *str[50];

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月18日
  • 已采纳回答 11月10日
  • 创建了问题 11月9日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分