gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:00:18 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的代码,将一种数据类型转换为另一种数据类型。我使用 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。我希望有人能发现,那就太好了。

最佳答案

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

字符复制[100];

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

关于c - 如何防止 strcpy 覆盖另一个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42194462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com