У меня есть проблема с функцией 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 (ул); return 0; } 'например. Вы должны добавить новую строку в 'printf()'; вероятно, вы должны напечатать в функции 'main()', а не в функции полезности (не более общего назначения). Технически вы должны передать 'int', содержащий либо' unsigned char', либо EOF для 'tolower()' (обычно достигаемый 'tolower ((unsigned char) s [i])'). Однако вы не столкнетесь с проблемой с 'A'. –
Возможно, ваше недоразумение заключается в том, что вы пытаетесь присвоить что-то 'argv [0]'. Предполагается, что они содержат информацию из вашей среды, в частности 'argv [0]' должно быть именем вашей скомпилированной программы. Если вы просто запустили его без присвоения '' A '', все должно работать тогда отлично, строки, которые 'argv' указывает на изменяемые. –