2017-10-20 25 views
-4

私は "B1、B3、B4、B6"の形式の文字列を持ち、変数num1 = "1"、num2 = "3"、num3 = "4"、num4 = "6"。このsscanfの実装は有効ですか?C - 他の区切り文字を使用して文字列を区切っていますか?

char *num1; 
char *num2; 
char *num3; 
char *num4; 
sscanf(str, "B%s,B%s,B%s,B%s", num1, num2, num3, num4); 
+0

は、なぜあなたは最初にそれを自分で試していない、と*は、*あなたが遭遇する可能性のある問題についての質問を投稿しますか? – ilim

+0

上記のコードを実行した後にどのような出力が得られましたか? – LethalProgrammer

+0

短い答え:いいえ。 'num1'などは未初期化ポインタなので、あなたのコードはとにかく間違っています。 –

答えて

0

これは本当に良い方法ではありません。あなただけの通常のint値として数値番号、すなわちしたい場合は、代わりに"%d"変換演算子を使用して、あなたの変数を使用すると、その後、アドレス演算子&を使用してsscanfに渡すint変数、正常であることがあります。

int num1; 
int num2; 
int num3; 
int num4; 
sscanf(str, "B%d,B%d,B%d,B%d", &num1, &num2, &num3, &num4); 

にあなたが一方を文字列として数字をしたいかのように、その後、配列代わりのポインタを使用します。

char num1[2]; // Two characters is enough for a single-character string, plus terminator 
char num2[2]; 
char num3[2]; 
char num4[2]; 
sscanf(str, "B%1s,B%1s,B%1s,B%1s", num1, num2, num3, num4); 

をフォーマット"%1s"は読み取り専用にsscanfを伝えますa signle文字。


それに加えて、あなたはおそらくsscanfコールが実際に正しく入力を解析されたことを確認する必要があります。これは、どのようなsscanf戻りチェックすることによって行うことができます。

if (sscanf(str, "B%d,B%d,B%d,B%d", &num1, &num2, &num3, &num4) == 4) 
{ 
    // All okay 
} 
else 
{ 
    // Something went wrong 
} 
+0

OPがこれを望むかどうかは不明です。彼は 'int num1 = 1'の代わりにこの' char * num1 = "1" 'を使うかもしれません。そして、質問のタイトルも私に彼が弦を求めていると信じさせます。 –

関連する問題