我正在尝试将字符串的指针数组传递给C中的函数toupper()。
main() {
char *choice[1];
scanf("%s", choice);
printf("%s", toupper(&choice[0]));
}
我总是输入一个小写字,例如“修改”来测试它。此类的不同变体,例如toupper(*choice[0])
或toupper(*choice)
或它们的混合,包括&
,都会抛出错误或返回相同的小写“修改”。有什么建议吗?
答案 0 :(得分:1)
从具有一个元素的char
指针数组开始对我来说没有多大意义,因为它只会指向一个字符串。如果你只想要一个字符串,为什么不声明一个char
数组字符串?
toupper
的原型是这样的:
int toupper( int ch );
它不需要数组。
您可以尝试这样:
#include <stdio.h>
#include <ctype.h>
int main()
{
char str[25];
int i = 0;
setbuf(stdout,NULL);
printf ("enter the name \n");
fgets (str,sizeof str-1, stdin);
printf ("the name entered in upper case is :\n");
while (str[i])
{
int c = str[i];
printf ("%c",toupper(c));
i++;
}
return 0;
}
注意 - 不要使用scanf
来获取字符串fgets
,更好。
答案 1 :(得分:0)
在调用scanf
之前,您需要为要存储的字符分配一些空间。您只需分配一个指针,然后甚至不将其设置为指向任何内容。同样,toupper
返回转换后的字符,该字符不是字符串,因此将其传递给printf
到%s
也是错误的。
答案 2 :(得分:-1)
这样的事情应该达到目的。
#include<stdio.h>
#include<ctype.h>
void StrToUpper(char *str)
{
while(*str != '\0')
{
*str = toupper(*str);
str++;
}
}
int main()
{
char *choice[1];
choice[1] = new char[10];
scanf("%s", choice[1]);
StrToUpper(choice[1]);
printf("%s", choice[1]);
return 0;
}