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

如何在C语言中打印包含空格的字符串?

解决C语言读取含空格字符串的问题

你的代码存在几个关键问题,导致无法正确读取含空格的输入:

  1. 变量声明错误:char *str[]; 是未初始化的指针数组,不能用来存储输入的字符串,应该使用固定大小的字符数组(或动态分配内存)。
  2. 入口函数不标准:C标准规定程序入口应为 int main(void),而非 void main()。
  3. 输入函数使用错误:scanf("%s") 会在遇到空格、制表符或换行符时停止读取,所以无法获取含空格的字符串;同时你传递的&str参数也是错误的。

以下是修正后的代码,使用fgets实现读取含空格的字符串:

#include <stdio.h>
#include <string.h> // 用于处理字符串的辅助函数

#define MAX_LENGTH 100 // 定义字符串最大存储长度

void print_string();

int main(void) {
    print_string();
    return 0;
}

void print_string() {
    char str[MAX_LENGTH]; // 声明固定大小的字符数组存储输入
    
    // fgets从标准输入读取内容,包含空格,最多读取MAX_LENGTH-1个字符(留位置存终止符)
    fgets(str, sizeof(str), stdin);
    
    // 移除fgets读取到的换行符(用户输入回车时会被一并读取)
    str[strcspn(str, "\n")] = '\0';
    
    printf("%s\n", str);
}

代码说明:

  • fgets(str, sizeof(str), stdin):从标准输入stdin读取字符串,保留输入中的所有空格,自动在末尾添加字符串终止符'\0',避免缓冲区溢出。
  • str[strcspn(str, "\n")] = '\0':strcspn会返回字符串中第一个换行符的位置,将该位置替换为'\0',消除fgets额外读取的换行符。
  • 若需要支持更长的输入,可增大MAX_LENGTH的值,或使用malloc进行动态内存分配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:25:27