1

私の C コードでは、入力として次の文字列が与えられます。

"c:\tc\bin\a c j k.jpg"

scanf で入力を読み取ろうとしましたが、失敗しました (引用符の有無にかかわらず入力を渡す)。別の解決策を探しています。

私のコードは次のとおりです。

char keytext[16],zzz,source[100],dest[100];
short int a;
size_t readcount;

clrscr();
printf("input the key text(max 16 characters):");
scanf("%s",&keytext);

printf("input file name:");
scanf("%s",&source);

/*fgets(source,100,stdin);
namelen=strlen(source);
if(source[namelen-1]=='\n')
source[namelen-1]='\0';*/

printf("output file name:");
scanf("%s",&dest);
4

2 に答える 2

1

フォーマット指定子%sは、最初の空白文字が検出されると入力の消費を停止するため、の終わりまでしか読み取りませんC:\tc\bin\a。まで読むにはk.jpg、スキャンセットを使用できます。

char input[128];
if (1 == scanf("%127[^\n]", input))
{
}

フォーマット指定子"%127[^\n]"は、バッファオーバーランを防ぐために、次の改行文字まで読み取るが、127文字を超えないことを意味します。出力を使用する前にの戻り値を確認する必要がありscanf()ます。これは、行われた割り当ての数を返します。

于 2012-09-02T08:00:18.320 に答える
0

scanf指定子を持つ関数は%s、charへのポインターを期待しますchar *。ただし、ポインタをcharへのポインタに渡します char **。修正するには、代わりに次のコードを使用してください。

scanf("%s", keytext);
scanf("%s", source);
scanf("%s", dest);

&記号は必要ありません。スペースを含む文字列全体を読み取りたい場合は、fgets関数を使用できます。

fgets(keytext, sizeof(keytext), stdin);
fgets(source,  sizeof(source),  stdin);
fgets(dest,    sizeof(dest),    stdin);
于 2012-09-02T08:00:05.870 に答える