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()'함수에서 인쇄해야합니다. 엄밀히 말하면,'unsigned char' 나 EOF를 tolower() (일반적으로'tolower (unsigned char) s [i])'로 구현 한'int'를 전달해야합니다). 그러나 'A'는 문제가되지 않습니다. –
아마도 여러분은 이미 argv [0]'에 무언가를 할당하려한다는 오해가 있습니다. 이것들은 여러분의 환경에 대한 정보를 담고있다. 특히 argv [0]는 컴파일 된 프로그램의 이름이어야한다. ''A "에 할당하지 않고 그냥 실행하면''모두 좋다. 그러면 argv가 가리키는 문자열은 수정 가능하다. –