【发布时间】:2016-11-05 19:39:01
【问题描述】:
我的下层功能有问题。尝试将它与 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;
}
【问题讨论】:
-
您无法可靠地写入字符串文字;这样做时会调用未定义的行为。例如,将
main()更改为int main(void) { char str[] = "A"; makeLower(str); return 0; }。您应该在printf()中添加一个换行符;您可能应该在main()函数而不是(不再是通用的)实用程序函数中打印。从技术上讲,您应该将包含unsigned char或EOF 的int传递给tolower()(通常由tolower((unsigned char)s[i])实现)。但是,您不会遇到A的问题。 -
也许你的误解已经是你试图分配一些东西给
argv[0]。这些应该包含来自您的环境的信息,特别是argv[0]应该是您编译程序的名称。如果您只是在没有分配给"A"的情况下运行它,那么一切都应该可以正常工作,argv指向的字符串是可修改的。