如何防止 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动态分配足够的内存给它。