【发布时间】:2016-06-29 20:28:55
【问题描述】:
我正在寻找标准 C 中解析字符串的最简单方法。字符串中的单词数量是固定的,但每个单词的长度不是固定的。代码将在内存有限的微处理器上运行,所以我不能只分配一个过度杀伤缓冲区,我想只分配我需要的内存。
以下代码有效,但我希望单个单词为 char* 。有没有办法解决这个问题?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void) {
char * my_words = "foo bar 1 2";
char word1[20];
char word2[20];
char word3[20];
char word4[20];
int match = sscanf(my_words,"%s %s %s %s",word1,word2,word3,word4);
printf("Matches: %d\r\n",match);
printf("%s\r\n",word1);
printf("%s\r\n",word2);
printf("%s\r\n",word3);
printf("%s\r\n",word4);
return 0;
}
谢谢
【问题讨论】:
-
你应该看看什么是数组,什么是指针。还要搜索“C 数组衰减到指针”。然后问问自己,你真正想在这里做什么。
-
由于您在受限环境中运行:您可以使用
malloc吗?是否允许使用变长数组? -
最后想想以后是否需要源字符串,或者它的内存是否可以重用!
-
在受限 MCU 上使用
scanf和printf系列可能已经是个坏主意了。 -
好吧,您可以将
char word1[20];替换为char *word1 = malloc(20);,但这只会让您的代码更加冗长。
标签: c arrays pointers char scanf