組み込みシステムの入力を解析しようとしています。C文字列をイン点に変換する問題
私はint型に別の文字列を変換していますSET VARNAME=1,2,3,4,5,6,7,8,9,10\0
は、両方atoi()
とstrtol()
は、文字列はここで8
私で始まる場合0を返すように見える: 私はこのような何かを期待していコード:
char *pch, *name, *vars;
signed long value[256];
int i;
#ifdef UARTDEBUG
char convert[100];
#endif
if(strncmp(inBuffer, "SET",3)==0)
{
pch = strtok(inBuffer," ");
pch = strtok(NULL," ");
name = strtok(pch, "=");
vars = strtok(NULL,"=");
pch = strtok(vars,",");
i = 0;
while(pch != NULL)
{
value[i] = atoi(pch);
#ifdef UARTDEBUG
snprintf(convert, sizeof(convert), "Long:%d=String:\0", value[i]);
strncat(convert, pch, 10);
SendLine(convert);
#endif
i++;
pch = strtok(NULL,",");
// Check for overflow
if(i > sizeof(value)-1)
{
return;
}
}
SetVariable(name, value, i);
}
は、それを渡す:
SET VAR=1,2,3,4,5,6,7,8,9,10\0
は私のUARTのデバッグに次のようなります:
Long:1=String:1
Long:2=String:2
Long:3=String:3
Long:4=String:4
Long:5=String:5
Long:6=String:6
Long:7=String:7
Long:0=String:8
Long:9=String:9
Long:10=String:10
UPDATE:
私は前と後の両方inBufferをチェックしました '[i]を=税引後営業利益(PCH)値;'それは同一であり、正しい点に分割されているように見えます。
S E T V A R 1 2 3 4 5 6 7 8 9 , 1 0
53 45 54 00 56 41 52 00 31 00 32 00 33 00 34 00 35 00 36 00 37 00 38 00 39 2c 31 30 00 00 00 00
UPDATE 2:
マイUARTDEBUGセクションには、現在読み取ります
#ifdef UARTDEBUG
snprintf(convert, 20, "Long:%ld=String:%s", value[i], pch);
SendLine(convert);
#endif
私はsnprintf()
行をコメントアウトした場合、すべてが完璧に動作します。それでは何が起こっているのですか?
値[]の宣言は何ですか? – bstpierre
signed long値[256]; – Tim
関数全体を表示したり、少なくともすべての接触した変数の宣言を表示すると、バグが見つかる可能性があります。 – ahy1