我正在尝试将小写字母中的字符串转换为大写字母。 我收到了一些错误(访问声音) 怎么办?
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
答案 0 :(得分:5)
如果输入的字符串长度超过9个字符,scanf()
将尝试写入字符串缓冲区的末尾。
您的while循环永远不会终止,因为您永远不会更改i
。
您应该在"%c"
调用中使用printf()
作为格式字符串,因为您正在编写字符,而不是以空字符结尾的字符串。
答案 1 :(得分:2)
int main()
{
char str[10];
int i=0;
scanf("%s", str);
while (str[i] != 0)
{
str[i] += -32;
i++;
}
printf("%s", str);
return 0;
}
当然,你必须检查str的溢出......
答案 2 :(得分:2)
正如cprogrammer所说
你最好使用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;
}
答案 3 :(得分:1)
这里有一些错误:
scanf("%s", &str);
- 由于str是指向char的指针,因此您不需要提供其地址,而是scanf("%s", str);
。 (正如斯文所说,这是不安全的)while (str[i] !=0)
这是一个无限循环,你应该在while块的末尾增加i
。 str[i] += -32;
会修改您所在的任何字符,您应该随时检查这是否是小写字母,例如:
if(str [i]&gt; ='a'&amp;&amp; str [i]&lt; ='z'){ str [i] - = 32; } //由于某种原因无法格式化这一行....
printf("%s", str[i])
再次使用printf是错误的,因为%s
期望char*
,而str[i]
是char
。相反,使用需要char
printf("%c", str[i])
醇>
答案 4 :(得分:1)
您可以使用Bitwise AND(&
)运算符技术制作小写字母大写字母。
char ch = letter & 223; [letter = a-z] // Now ch is all time capital letter
答案 5 :(得分:0)
您最好使用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;
}
答案 6 :(得分: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();
}