【发布时间】:2023-03-21 08:14:01
【问题描述】:
我正在尝试编写一个简单的代码,将一种类型的数据转换为另一种类型的数据。我使用strtok 提取一部分数据,然后运行一长串if 条件以找到正确的输出。但是,当找到正确的输出并将其写入变量currentNote 时,它似乎也覆盖了变量comma,原因我无法弄清楚。这是代码的问题部分:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char sequence[] = "c1[M],c1[M],d3[L],c3[M],b2[M],(#A-2)[IKN],(#A-1)[L]";
char copy[] = "";
char *comma;
char currentNote[4] = "";
strcpy(copy, sequence);
comma = strtok(copy, ",");
if(strstr(comma, "c1") != 0) //c1
{
printf("%s\n\n", comma); //Here ...
strcpy(currentNote, "C5 ");
printf("%s\n\n", comma);
}
return 0;
}
结果如下:
c1[M]
cC5
不用说是strcpy(currentNote, "C5 "); 造成的。我不知道为什么,我认为它会像我希望的那样返回c1[M]。经过更多的实验,结果证明第二个printf("%s\n\n", comma); 将始终返回sequence 的第一个字符,然后是C5。我希望有人能发现,这将是非常棒的。
【问题讨论】:
-
也许给
copy一些内存来存储东西 -
那不编译。
currentNote声明在哪里? -
strcpy(copy, sequence)不好。copy没有足够的空间。 -
我会试试看,感谢您的快速回答。哦,我好像忘记添加了,我去编辑一下。
-
@d3l:你说“做n't”?