あるタイプのデータを別のタイプのデータに変換する簡単なコードを作成しようとしています。私はstrtok
を使用してデータの一部を抽出し、正しい出力を見つけるために長いシリアルのif
条件を実行します。しかし、正しい出力が見つけられ、変数currentNote
に書き込まれたときには、私が理解できない理由で変数comma
を上書きしているようです。ここでは、コードの問題の一部です:strcpy(currentNote, "C5 ");
がそれを引き起こしていると言ってstrcpyが別の変数を上書きしないようにするには?
c1[M]
cC5
必要がありません:
#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]
を返すと思った理由を知らない。もう少し実験をしてみると、2番目のprintf("%s\n\n", comma);
は常にsequence
の最初の文字を返し、次にC5
という文字を返します。私は誰かが見つけることができることを願って、それは非常に素晴らしいだろう。
おそらく 'コピー'に何かの記憶を入れるメモリ –
それはコンパイルされません。 'currentNote'はどこで宣言されましたか? – ikegami
'strcpy(コピー、シーケンス)'は良くありません。 'copy'には十分なスペースがありません。 – ikegami