0

tolower 関数に問題があります。argv で使用しようとしましたが、出力は $0@ でした。コードの何が問題になっていますか?

#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;
}
4

1 に答える 1

0

argvは、ポインタへのポインタであり、char**. しかし、関数はchar*. したがって、次のように渡す必要があります。

makeLower(argv[0]);

しかし、argv[0]現在は文字列リテラルを指しているため、これは機能しません。文字列リテラルの変更はundefinedです。

代わりに、次のような変更可能な配列を渡します。

int main(int argc, char *argv[]) {
    char arr[] = "A";

    makeLower(arr);
    return 0;
}

他のオプションは、渡された文字列リテラルのコピーを (経由でargv[0]) 作成することであり、その後、それを変更できるようになります。基本的に、C では文字列リテラルを合法的に変更できないという考え方です。

于 2016-11-05T19:41:17.170 に答える