私は "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);
私は "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);
これは本当に良い方法ではありません。あなただけの通常の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
}
OPがこれを望むかどうかは不明です。彼は 'int num1 = 1'の代わりにこの' char * num1 = "1" 'を使うかもしれません。そして、質問のタイトルも私に彼が弦を求めていると信じさせます。 –
は、なぜあなたは最初にそれを自分で試していない、と*は、*あなたが遭遇する可能性のある問題についての質問を投稿しますか? – ilim
上記のコードを実行した後にどのような出力が得られましたか? – LethalProgrammer
短い答え:いいえ。 'num1'などは未初期化ポインタなので、あなたのコードはとにかく間違っています。 –