You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言使用多个scanf函数后不输出用户输入的两个字符串如何解决?

问题原因分析
  • 变量定义错误:你第一段代码的char firstName, lastName [20];写法存在严重问题,firstName被定义为单个char类型变量,仅能存储1个字符,而scanf的%s格式符用于读取完整字符串,写入时会超出firstName的内存空间触发缓冲区溢出,属于未定义行为,程序运行后直接停止、崩溃都是这类错误的典型表现。
  • 指针使用错误:字符数组名本身就是指向数组首地址的指针,使用scanf读取字符串时不需要额外加&取地址符,你两段代码里的scanf("%s", &firstName)、scanf("%s", &lastName)写法均不符合语法规范。
  • 格式符参数不匹配:第一段代码最后printf用%s输出firstName,%s要求传入字符串首地址,但你传入的是单个char值,类型完全不匹配会进一步触发未定义行为。你第二段代码看起来能正常运行完全是巧合,它本身也存在printf声明了2个%s格式符、仅传入1个参数的错误,只是刚好没有触发崩溃。
修复后可正常运行的代码
#include <stdio.h>
int main()
{
   // 两个变量均定义为长度足够的字符数组
   char firstName[20], lastName[20];
  
   printf("Your first name:");
   // 数组名直接作为参数传入,不需要加&
   scanf("%s", firstName);
   
   printf("Your last name:");
   scanf("%s", lastName);
   
   printf("Your full name is: %s %s", firstName, lastName);
   return 0;
}
额外注意事项
  • %s格式符读取字符串时会自动跳过空格、换行等空白字符,输入姓名时不要带空格,否则内容会被截断为两部分。如果需要读取带空格的姓名,可以改用%[^\n]格式符或者fgets函数。
  • 为了避免输入内容过长导致缓冲区溢出,建议给%s加上长度限制,比如写成%19s,最多读取19个字符,预留1位存储字符串结束符\0。

内容的提问来源于stack exchange,提问作者sivhaslee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:24:04