0

我的下层功能有问题。尝试将它与 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]now 指向一个字符串文字。修改字符串文字是未定义的。

而是传递一个可修改的数组,例如:

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

    makeLower(arr);
    return 0;
}

其他选项是复制传递的字符串文字(通过argv[0]),然后您将能够对其进行修改。基本上,这个想法是您不能合法地修改 C 中的字符串文字。

于 2016-11-05T19:41:17.170 回答