我有一个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
(and toupper
, isalpha
等)你真的需要将你的输入投射到unsigned char
。否则,基本英语/ASCII 字符集之外的许多(大多数?)字符经常会导致未定义的行为(例如,在典型情况下,大多数重音字符将显示为负数)。
顺便说一句,当您读取字符串时,您不想使用scanf
with %s
-- 你总是想指定字符串长度,例如:scanf("%19s", foo);
, 假设SIZE
== 20 (即,您想要指定比大小小一的值。或者,您可以使用fgets
, like fgets(foo, 20, infile);
。请注意,与fgets
,您指定缓冲区的大小,而不是像您那样减少一个scanf
(以及像 fscanf 这样的公司)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)