这里有什么问题?
我想检查 char 数组中的字符是否较慢,因此如果是,则应以大写形式更改。
#include <stdio.h>
int main(int argc, char *argv[]) {
char arr[100];
scanf("%s",&arr);
for(int i=0;i<sizeof(arr);i++){
if(int islower(arr[i])){
arr[i] = toupper(arr[i]);
}
}
printf("%s",arr);
return 0;
}
要正确测量字符串的长度,请使用 strlen
,而不是sizeof
for(int i=0;i<strlen(arr);i++){ // Don't use sizeof on this line
这是一个更简单的版本:
#include <stdio.h>
#include <ctype.h>
int main(int argc, char *argv[]) {
char arr[100];
scanf("%s", arr);
for(int i=0;i<strlen(arr);i++){
arr[i] = toupper(arr[i]);
}
printf("%s",arr);
return 0;
}
甚至:
#include <stdio.h>
#include <ctype.h>
int main(void) {
char arr[100];
scanf("%s", arr);
for(char* c=arr; *c=toupper(*c); ++c) ;
printf("%s",arr);
return 0;
}
您缺少包含#include <ctype.h>
此外,您也不需要if
声明。 toupper
内部处理这个问题(如果您真的想保留islower
请删除if
语句中的int
)。
添加声明 islower
和 toupper
的标头。
#include <ctype.h>
此外,
if(int islower(arr[i])){
是不对的。删除int
。
if(islower(arr[i])){
这里有什么问题?
行:if(int islower(arr[i])){
因表达式错误而编译失败。
更改为:if(islower(arr[i])){
在代码的这一行中,可能会超出应有的位置:
for(int i=0;i<sizeof(arr);i++){
正如您可能正在查看字符串终止符之后的空间一样:
|s|t|r|i|n|g| |<unknown contents here, part of your legal memory, but are not part of the string>
它应该是:
int len = strlen(arr);
for(int i=0;i<len;i++){