我試圖做一個簡單的代碼,將一種數據類型轉換爲另一種。我使用strtok
來提取數據的一部分,然後運行一長串的if
條件來查找正確的輸出。但是,當找到正確的輸出並寫入變量currentNote
時,它似乎也會覆蓋變量comma
,這是我找不到的原因。這裏是代碼的問題部分:如何防止strcpy覆蓋另一個變量?
#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
。我希望有人能夠發現,這將非常棒。
也許給'複製'一些內存來存儲東西在 –
這不會編譯。 「currentNote」聲明在哪裏? – ikegami
'strcpy(copy,sequence)'不好。 'copy'沒有足夠的空間。 – ikegami