0
tolower関数に問題があります。 argvで使用しようとしましたが、出力は$ 0 @でした。私のコードに何が問題なのですか?tolower関数の出力が正しくありません
#include <stdlib.h>
#include <stdio.h>
void makeLower(char *s) {
int i;
for(i = 0; s[i] != '\0'; i++){
s[i] = tolower(s[i]);
}
printf("%s", s);
}
int main(int argc, char *argv[]) {
argv[0]="A";
makeLower(argv);
return 0;
}
文字列リテラルに確実に書き込むことはできません。そうしたときに未定義の動作が呼び出されます。 'main()'を 'int main(void){char str [] =" A "に変更してください。 makeLower(str); 0を返します。 } '例えば。 'printf()'に改行を追加する必要があります。おそらく 'main()'関数で印刷するべきでしょう。技術的には、 'unsigned char'か' tolower() '(通常は' tolower(unsigned char)s [i]) 'によって実現される)を含む' int'を渡すべきです。しかし、あなたは 'A'で問題に遭遇することはありません。 –
あなたの誤解はすでに 'argv [0]'に何かを割り当てようとしていることでしょう。これらはあなたの環境からの情報を含んでいるはずです。特に、 'argv [0]'はコンパイルされたプログラムの名前でなければなりません。 '' A ''に代入せずに実行すれば、すべてうまくいくはずですが、 '' argv''が指す文字列は変更可能です。 –