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()'函數中打印,而不是(不再是通用的)實用函數。從技術上講,你應該傳遞一個'int',它包含一個'unsigned char'或者EOF到'tolower()'(通常通過'tolower((unsigned char)s [i])'來實現)。但是,你不會遇到'A'的問題。 –
也許你的誤解已經是你嘗試給'argv [0]'分配一些東西。這些應該包含來自你的環境的信息,特別是'argv [0]'應該是你的編譯程序的名字。如果你只是運行它而沒有賦值給「A」,那麼所有的工作都可以正常工作,argv指向的字符串是可以修改的。 –