将字符串数组的指针传递给C中的toupper()

时间:2013-08-19 06:13:17

标签: c arrays pointers

我正在尝试将字符串的指针数组传递给C中的函数toupper()。

main() {
    char *choice[1];
    scanf("%s", choice);
    printf("%s", toupper(&choice[0]));
}

我总是输入一个小写字,例如“修改”来测试它。此类的不同变体,例如toupper(*choice[0])toupper(*choice)或它们的混合,包括&,都会抛出错误或返回相同的小写“修改”。有什么建议吗?

3 个答案:

答案 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;
}