私はchar foo[SIZE]; //(string)
%s
(正しい入力のように)正しくprintfs
入力しましたが、小文字に設定したいと考えています。なので使ってみた
if (isupper(*foo))
*foo=tolower(*foo);
つまり、私がするとき:
printf("%s" foo); //I get the same text with upper case
文章は変わらないようです。ありがとうございました。
foo
はポインターではないため、ポインターとして使用したくありません。また、使用する前に文字が大文字かどうかを確認する必要はありませんtolower
。大文字が小文字に変換され、他の文字は変更されません。おそらく次のようなものが必要です。
for (i=0; foo[i]; i++)
foo[i] = tolower((unsigned char)foo[i]);
tolower
(and toupper
、isalpha
など) を呼び出すときは、入力を にキャストする必要があることに注意してくださいunsigned char
。そうしないと、基本的な英語/ASCII 文字セット以外の多くの (ほとんどの?) 文字が未定義の動作を引き起こすことがよくあります (たとえば、典型的なケースでは、ほとんどのアクセント付き文字が負の数として表示されます)。
余談ですが、文字列を読み取るときは with を使用scanf
したくありません%s
-- 常に文字列の長さを次のように指定します: == 20scanf("%19s", foo);
と仮定しSIZE
ます (つまり、 size. または、, fgets
likeを使用することもできます.では、バッファのサイズを指定することにfgets(foo, 20, infile);
注意してください。fgets
scanf
これを試して
for(i = 0; foo[i]; i++){
foo[i] = tolower(foo[i]);
}
*foo=tolower(*foo); //doing *(foo+i) or foo[i] does not work either
これらのオプションのすべてが意味をなさないため
次のように使用する必要があります。
for(i = 0; foo[i] != '\0'; i++){
foo[i] = tolower(foo[i]);
}