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

如何将空格分隔单词的字符串拆分为独立变量?(C语言)

最简单的空格分隔字符串提取方法

你的代码存在几个关键问题导致无法正常工作:

  • counter变量全程没更新,每个提取循环都从索引0开始,自然拿不到不同的单词
  • 直接给order1[12]这类固定位置累加字符是错误的,字符串需要按顺序逐个填充字符,最后必须加'\0'作为结束标记,否则打印时会出现乱码
  • 第一个for循环里的i没有初始化,会触发未定义行为

对于新手来说,用标准库的sscanf函数是最简单的实现方式,它可以自动按空格分隔提取字符串,不用手动处理循环和断点。

修改后的代码如下:

#include <stdio.h>
#include <string.h> // 要用到字符串比较函数strcmp时需要这个头文件

int main(){
    char input[100];
    char order1[20] = {0}; // 初始化数组,避免未定义的垃圾值
    char order2[20] = {0};
    char order3[20] = {0};
    char order4[20] = {0};

    // 读取输入的空格分隔字符串
    fgets(input, 100, stdin);
    printf("输入的指令是:%s\n", input);

    // 用sscanf按空格分隔提取最多4个单词
    sscanf(input, "%s %s %s %s", order1, order2, order3, order4);

    // 打印提取结果
    printf("提取的指令1:%s\n", order1);
    printf("提取的指令2:%s\n", order2);
    printf("提取的指令3:%s\n", order3);
    printf("提取的指令4:%s\n", order4);

    // 示例:和其他字符串比较(比如判断第一个指令是否为"help")
    if(strcmp(order1, "help") == 0){
        printf("第一个指令是help\n");
    }

    return 0;
}

关键说明:

  • sscanf里的%s会自动跳过空格,提取连续的非空格字符作为一个完整字符串
  • 数组初始化char order1[20] = {0}可以避免未初始化的垃圾值导致乱码
  • 比较字符串必须用strcmp函数,不能直接用==,因为==比较的是数组的内存地址,不是字符串内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:08:17