如何防止 strcpy 也覆盖另一个变量?
How to prevent strcpy from overwriting another variable as well?
我正在尝试编写一个简单的代码,将一种类型的数据转换为另一种类型的数据。我使用 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 ");
造成的。我不知道为什么,我认为它会 return c1[M]
就像我希望的那样。经过更多的实验后,事实证明第二个 printf("%s\n\n", comma);
将始终 return sequence
的第一个字符,然后是 C5
。希望有人能知道,那就太好了。
您来电
strcpy(copy, sequence)
而 copy
是 1 个元素长度的数组。您需要通过给它足够的大小来定义它。您的代码只是一个 UB。重新定义为
char copy[100];
或者使用malloc
动态分配足够的内存给它。
我正在尝试编写一个简单的代码,将一种类型的数据转换为另一种类型的数据。我使用 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 ");
造成的。我不知道为什么,我认为它会 return c1[M]
就像我希望的那样。经过更多的实验后,事实证明第二个 printf("%s\n\n", comma);
将始终 return sequence
的第一个字符,然后是 C5
。希望有人能知道,那就太好了。
您来电
strcpy(copy, sequence)
而 copy
是 1 个元素长度的数组。您需要通过给它足够的大小来定义它。您的代码只是一个 UB。重新定义为
char copy[100];
或者使用malloc
动态分配足够的内存给它。