如何防止strcpy覆盖另一个变量呢?

时间:2017-02-12 23:23:13

标签: c string overwrite strcpy

我正在尝试制作一个将一种数据转换为另一种数据的简单代码。我使用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。我希望有人能发现,这会非常棒。

1 个答案:

答案 0 :(得分:1)

你正在打电话 strcpy(copy, sequence) copy是一个1个元素长度的数组。您需要通过给它足够的大小来定义它。你的代码就是UB。重新定义它

char copy[100];

或使用malloc动态分配足够的内存。