【发布时间】:2013-08-17 20:42:42
【问题描述】:
我正在尝试将以下字符串分成三个单独的变量,即 a、b 和 c。:
" mov/1/1/1,0 STR{7}, r7"
每个需要持有不同的字符串段,例如:
a = "mov/1/1/1,0"
b = "STR{7}"
c = "r7"
每个命令之间可能有空格或制表符;这就是这部分代码更棘手的原因。
我尝试使用strtok 进行字符串操作,但没有成功。
char command[50] = " mov/1/1/1,0 STR{7}, r7";
char a[10], b[10], c[10];
char * ptr = strtok(command, "\t");
strcpy(a, ptr);
ptr = strtok(NULL, "\t");
strcpy(b, ptr);
ptr = strtok(NULL, ", ");
strcpy(c, ptr);
但这会让事情变得非常混乱,因为变量a, b 和c 持有的值超出了它们应有的值,这会导致程序崩溃。
输入可能会有所不同:
" mov/1/1/1,0 STR{7}, r7"
"jsr /0,0 PRTSTR"
"mov/1/1/0,0 STRADD{5}, LASTCHAR {r3} "
其中 a、b 和 c 的值更改为给定字符串的不同部分。
有人告诉我,将 sscanf 用于这种方式比使用 strtok 更安全,但我不确定它为什么以及如何帮助我。
很高兴听到您的意见!
【问题讨论】:
-
mov/1/1/0,0和LASTCHAR {r3}会超过九个字符(a[10],c[10])。 -
您说您希望用“空格或制表符”分隔事物,但随后您使用
strtok并仅将"\t"作为分隔符。也许您只想要" \t"(如您所说的空格或制表符),尽管这将采用一个或多个空格或制表符的任何序列作为分隔符。如果你想让两个空格表示一个“空”字段,那是行不通的。 -
您的示例字符串
"jsr /0,0 PRTSTR"会在工作中使用扳手;它在第二个字段中有一个重要的逗号,而在其他两个示例字符串中,第二个字段中的逗号不重要。如果您需要删除尾随逗号,您可以在基于空格的拆分之后执行此操作。