如何将空格分隔单词的字符串拆分为独立变量?(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
相关产品推荐
相关产品推荐

