【发布时间】:2019-07-05 12:49:58
【问题描述】:
所以,我必须做一个术语表,scanf 将始终读取一个字符和一些文本,第一个字符是我需要执行的操作,例如擦除某些内容、包含或打印。另一部分是我将添加或删除的单词,其余的都是含义。 有时我只会收到用于操作的字符,例如“打印所有”,或者我可以收到类似“e word mean meaning”之类的内容来删除含义,但我也可以收到“e word”并删除相关的单词和含义,因此条目的大小并不总是相同。 入围案例有:
i word meaning
q word
e word
e word meaning
p
带有“含义”的字符串就像“有红色”
我试图用strtok和strcat来拼凑意思,但没有成功,我留下的这段代码只是一个例子,我知道它不起作用
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void){
char str[] = "a bbbbbbbbbb cccc ccccccccccc cccc";
char* temp;
char* rest = str;
int i = 0;
char op[2];
while ((temp = strtok_r(rest, " ", &rest))){
printf("%s ", temp);
if (i>=2){
strcat(op[2],temp);
}
op[i]=temp;
i++;
}
return(0);
}
动作:一个 词:bbbbbbbbbb 意思:cccc ccccccccccc cccc
【问题讨论】:
-
a是否总是一个字符?bbbbbbbbbb总是 10 个字符吗?然后很容易只从字符串中复制这些位。特别是如果你记得,例如str等于&str[0]。 -
您的规范不完整,因为“拆分”不明确。您需要对“拆分”字符串做什么?
-
@Guerezi 数组 op 没有被初始化所以这个调用 strcat(op[2],temp); (除了它是不正确的)具有未定义的行为。
-
@VladfromMoscow 更不用说索引
2超出范围,或者op[2]不是字符串。 -
@Someprogrammerdude 我在写评论时也看到了这个。:)
标签: c arrays pointers string.h