我正在尝试制作一个将一种数据转换为另一种数据的简单代码。我使用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
。我希望有人能发现,这会非常棒。
答案 0 :(得分:1)
你正在打电话
strcpy(copy, sequence)
copy
是一个1个元素长度的数组。您需要通过给它足够的大小来定义它。你的代码就是UB。重新定义它
char copy[100];
或使用malloc
动态分配足够的内存。