我有一个char foo[SIZE]; //(string)
并使用正确输入%s
(如printfs
正确输入),但现在想将其设置为小写。所以我尝试使用
if (isupper(*foo))
*foo=tolower(*foo);
即当我这样做时:
printf("%s" foo); //I get the same text with upper case
文本似乎没有改变。谢谢你。
foo
不是指针,因此您不想将其用作指针。您也不必在使用前检查字符是否为大写字母tolower
——它将大写转换为小写,其他字符保持不变。你可能想要这样的东西:
for (i=0; foo[i]; i++)
foo[i] = tolower((unsigned char)foo[i]);
请注意,当您调用tolower
(和toupper
,isalpha
等)时,您确实需要将输入转换为unsigned char
. 否则,基本英语/ASCII 字符集之外的许多(大多数?)字符将经常导致未定义的行为(例如,在典型情况下,大多数重音字符将显示为负数)。
顺便说一句,当您读取字符串时,您不想使用scanf
with %s
-- 您总是想指定字符串长度,例如: scanf("%19s", foo);
,假设SIZE
== 20 (即,您希望指定比大小。或者,您可以使用fgets
, like fgets(foo, 20, infile);
。请注意,使用fgets
,您指定缓冲区的大小,而不是像使用scanf
(和 fscanf 之类的公司)那样少一个。
尝试这个
for(i = 0; foo[i]; i++){
foo[i] = tolower(foo[i]);
}
*foo=tolower(*foo); //doing *(foo+i) or foo[i] does not work either
因为所有这些选项都没有意义
你应该像这样使用它:
for(i = 0; foo[i] != '\0'; i++){
foo[i] = tolower(foo[i]);
}