2017-02-12 9 views
0

あるタイプのデータを別のタイプのデータに変換する簡単なコードを作成しようとしています。私は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という文字を返します。私は誰かが見つけることができることを願って、それは非常に素晴らしいだろう。

+0

おそらく 'コピー'に何かの記憶を入れるメモリ –

+0

それはコンパイルされません。 'currentNote'はどこで宣言されましたか? – ikegami

+1

'strcpy(コピー、シーケンス)'は良くありません。 'copy'には十分なスペースがありません。 – ikegami

答えて

1


strcpy(copy, sequence)copyは、1要素の長さの配列です。十分なサイズを与えて定義する必要があります。あなたのコードはそのままUBです。

char copy[100];

mallocを使用して動的にそれに十分なメモリを割り当てるようにそれを再定義します。

+1

。常にあなたのフィードバックに感謝します。答えを編集しました。 – VHS

関連する問題