次の形式の文字列に char 配列があります<item1>:<item2>:<item3>
。さまざまなアイテムを個別に印刷できるように、それを分解する最良の方法は何ですか? 配列をループするだけですか、それとも役立つ文字列関数がありますか?
5314 次
4 に答える
1
私はsscanf
関数を使用します
char * str = "i1:i2:i3";
char a[10];
char b[10];
char c[10];
sscanf(str, "%s:%s:%s", a, b, c);
これは、バッファ オーバーフローに対して脆弱であるため、安全ではありません。Windows では、セキュリティハックとして sscanf_s があります。
于 2012-09-06T02:53:09.907 に答える
1
strtok を試すことができます: , - または | で区切られた部分文字列を取得するサンプル コードを次に示します。
#include <stdio.h>
#include <string.h>
int main(int argc,char **argv)
{
char buf1[64]={'a', 'a', 'a', ',' , ',', 'b', 'b', 'b', '-', 'c','e', '|', 'a','b', };
/* Establish string and get the first token: */
char* token = strtok( buf1, ",-|");
while( token != NULL )
{
/* While there are tokens in "string" */
printf( "%s ", token );
/* Get next token: */
token = strtok( NULL, ",-|");
}
return 0;
}
于 2012-09-06T02:56:42.940 に答える
0
単純に文字列を反復処理し、 をヒットするたび':'
に、最後に が出現してから読み取られたものを出力し':'
ます。
#define DELIM ':'
char *start, *end;
start = end = buf1;
while (*end) {
switch (*end) {
case DELIM:
*end = '\0';
puts(start);
start = end+1;
*end = DELIM;
break;
case '\0':
puts(start);
goto cleanup;
break;
}
end++;
}
cleanup:
// ...and get rid of gotos ;)
于 2012-09-06T06:27:15.820 に答える