我有char foo[SIZE]; //(string)
并使用%s
(正如其中printfs
正确的输入)正确输入了它,但现在想要将其设置为小写。所以我尝试使用
if (isupper(*foo))
*foo=tolower(*foo);
即我做的时候:
printf("%s" foo); //I get the same text with upper case
文字似乎没有改变。谢谢。
答案 0 :(得分:5)
foo
不是指针,因此您不希望将其用作指针。在使用tolower
之前,您也不必检查字符是否为大写字母 - 它将大写字母转换为小写字母,并保持其他字符不变。你可能想要这样的东西:
for (i=0; foo[i]; i++)
foo[i] = tolower((unsigned char)foo[i]);
请注意,当您致电tolower
(以及toupper
,isalpha
等)时,您确实需要将输入转发给unsigned char
。否则,基本英语/ ASCII字符集之外的许多(大多数?)字符将经常导致未定义的行为(例如,在典型情况下,大多数重音字符将显示为负数)。
顺便说一句,当你正在阅读字符串时,你不想将scanf
与%s
一起使用 - 你总是想要指定字符串长度,例如:{{1假设scanf("%19s", foo);
== 20(即,您希望指定一个小于大小。或者,您可以使用SIZE
,例如fgets
。请注意fgets(foo, 20, infile);
},你指定缓冲区的大小,而不是像fgets
那样(和像fscanf这样的公司)。
答案 1 :(得分:3)
试试这个
for(i = 0; foo[i]; i++){
foo[i] = tolower(foo[i]);
}
答案 2 :(得分:3)
*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]);
}