我想将小写字符串转换为大写字符串。 但是出现了错误(访问冲突)。 该怎么办?
int main()
{
char str[10];
int i=0;
scanf("%s", &str);
while (str[i] !=0)
{
str[i] += -32;
printf("%s", str[i]);
}
return 0;
}
thx
我想将小写字符串转换为大写字符串。 但是出现了错误(访问冲突)。 该怎么办?
int main()
{
char str[10];
int i=0;
scanf("%s", &str);
while (str[i] !=0)
{
str[i] += -32;
printf("%s", str[i]);
}
return 0;
}
thx
如果您输入的字符串超过9个字符,scanf()
将尝试写入超出您的字符串缓冲区的范围。
由于您从未更改i,因此您的while循环永远不会终止。
由于您正在写入字符而不是以null结尾的字符串,因此在printf()
调用中应使用"%c"
作为格式字符串。
scanf("%s", &str);
无论如何都不正确,详见下面的答案。 - MByDint main()
{
char str[10];
int i=0;
scanf("%s", str);
while (str[i] != 0)
{
str[i] += -32;
i++;
}
printf("%s", str);
return 0;
}
当然,你必须检查字符串的溢出情况...
但是如果你不想按照现有方式进行,而是想按照自己的方式进行。You better use toupper
/* toupper example */ #include <stdio.h> #include <ctype.h> int main () { int i=0; char str[]="Test String.\n"; char c; while (str[i]) { c=str[i]; putchar (toupper(c)); i++; } return 0; }
int main()
{
char str[10];
int i=0;
scanf("%s", &str);
while (str[i]!='\0' && i<10)
{// You forgot this: '\0' instead of 0 and also i<10
str[i] += -32;
printf("%c", str[i]);//char, not string
i++; //And this
}
return 0;
}
这里有几个错误:
scanf("%s", &str);
- 由于str是一个指向char的指针,你不需要给它地址,而是使用scanf("%s", str);
。(正如Sven所说,这是不安全的)while (str[i] !=0)
这是一个无限循环,你应该在while块的末尾增加i
。str[i] += -32;
将修改任何你正在处理的字符,你应该检查这是否是小写字母,例如:
if (str[i] >= 'a' && str[i] <= 'z'){ str[i] -=32; } //由于某种原因,我无法格式化此行....
printf("%s", str[i])
再次错误地使用printf,因为%s
期望char*
,而str[i]
是一个char
。相反,使用printf("%c", str[i])
,它期望一个char
你最好使用toupper
/* toupper example */
#include <stdio.h>
#include <ctype.h>
int main ()
{
int i=0;
char str[]="Test String.\n";
char c;
while (str[i])
{
c=str[i];
putchar (toupper(c));
i++;
}
return 0;
}
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main();
{
int i, count;
char str[200];
clrscr();
printf("Enter a string");
scanf("%s", str);
count = strlen(str);
for(i=0; i<=count; i++)
{
if((str[i] >= 97) && (str[i] <= 122))
{
str[i] = str[i] - 32;
}
}
printf("%s", str);
getch();
}
您可以使用 按位与(&
)运算符的技巧将小写字母转换为大写字母。
char ch = letter & 223; [letter = a-z] // Now ch is all time capital letter
+= -32
!! 我会写成- = 32
:) - pmg