How to set a string to all lowercase [duplicate]

折月煮酒 提交于 2019-12-05 11:19:44

foo isn't a pointer, so you don't want to use it as one. You also don't have to check whether a character is an upper-case letter before using tolower -- it converts upper to lower case, and leaves other characters unchanged. You probably want something like:

for (i=0; foo[i]; i++)
    foo[i] = tolower((unsigned char)foo[i]);

Note that when you call tolower (and toupper, isalpha, etc.) you really need to cast your input to unsigned char. Otherwise, many (most?) characters outside the basic English/ASCII character set will frequently lead to undefined behavior (e.g., in a typical case, most accented characters will show up as negative numbers).

As an aside, when you're reading the string, you don't want to use scanf with %s -- you always want to specify the string length, something like: scanf("%19s", foo);, assuming SIZE == 20 (i.e., you want to specify one less than the size. Alternatively, you could use fgets, like fgets(foo, 20, infile);. Note that with fgets, you specify the size of the buffer, not one less like you do with scanf (and company like fscanf).

Try this

for(i = 0; foo[i]; i++){
  foo[i] = tolower(foo[i]);
}

*foo=tolower(*foo); //doing *(foo+i) or foo[i] does not work either

because all of those options do not make sense

You should use it like this:

for(i = 0; foo[i] != '\0'; i++){
    foo[i] = tolower(foo[i]);
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!