tolower 函数输出错误

Wrong output from tolower function

我对较低的功能有疑问。尝试将它与 argv 一起使用,但输出为 $0@。我的代码有什么问题?

#include <stdlib.h>
#include <stdio.h>

void makeLower(char *s) {
    int i;
    for(i = 0; s[i] != '[=10=]'; i++){
        s[i] = tolower(s[i]);
        }
        printf("%s", s);
}

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

    makeLower(argv);
    return 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 中的字符串文字。