2012-02-10 7 views
0

空の部分文字列をsscanfで解析する方法... 私の文字列str [] = "最初のもの、3番目のもの" 2番目の部分文字列がゼロの場合、3番目と最後の部分文字列を読み取ることができません。このエラーを克服する解決策はありますか?ClanguageのSSCANF関数の解析エラーを克服する方法は?

**Code:** 


#include <math.h> 
#include <stdio.h> 
#include <stdlib.h> 

char *tokenstring = "first,second,25.5,15"; 
int result, i; 
double fp; 
char o[10], f[10], s[10], t[10]; 

void main() 
{ 
    result = sscanf(tokenstring,"%[^','],%[^','],%[^','],%s", o,t,s,f);`sscanf function` 
    fp = atof(s); 
    i = atoi(f); 
    printf("%s\n %lf\n %s\n %d\n", o,t,fp,i); 
} 
for this program if i execute my output is 

`output` 
>first 
>second 
>25.5 
>15 

が、私はtokenstringポインタで「第二」のサブストリングを削除しよう...と私は実行しようとした場合、その後、私のように出力を取得する場合:

char *tokenstring = "first,,25.5,15"; 

>first 
>(blank) 
>0.00 
>0 

私は読みますか"tokenstring"という文字列の第3および第4の部分文字列...任意の提案?????????? 。

+0

を解析。 3未満に戻った場合、確実に 's'にアクセスすることはできません。 'sscanf'の戻り値をチェックしてください! – pmg

答えて

0

あなた `sscanf`が4未満を返した場合は、確実に` F`にアクセスすることはできません入力文字単位で

char part[4][1000] = {0}; 
const char *input = "first,,25.5,15"; 
size_t k, n; 

for (k = 0; k < 4; k++) { 
    char *curr = part[k]; 
    while (*input && *input != ',') { 
     *curr++ = *input++; 
    } 
    if (*input == ',') input++; else break; 
} 
/* (k+1) elements have been parsed */ 
for (n = 0; n < k + 1; n++) { 
    printf("part %d (between square parenthesis): [%s]\n", (int)n, part[n]); 
} 
+0

こんにちは、このコードを実行しようとすると、currポインタの値が常にゼロになっています....... – sur

+0

コードが実行された後、パーツは配列 'part'にあります。私はそれを示すコードを更新しました。 – pmg

+0

はいそれはうまく動作します.... ....更新URのおかげで...... – sur

関連する問題