繁体   English   中英

在 C 中:我想混合使用字符并将它们转换为小写

[英]In C: I want to take a mix of characters and convert them to lower case

为什么我的代码不接受 argv[] 字符串? 我需要做什么来修复它? 我希望能够同时输入小写和大写字母,并最终在数组中只输入小写字母。 谢谢你的帮助。

#include <stdio.h>
#include <stdlib.h>  
#include <ctype.h>

int main(int argc, char argv[])
{

  char word[30]= atoi(argv[1]);  // here is the input
  for (int i = 0; word[i]; i++)
    word[i] = tolower(word[i]);

  printf("Here is the new word: %s\n", word);
  return 0;
}
int main(int argc, char argv[])

应该:

int main(int argc, char *argv[])

此外, strtol是比atoi更好的选择,因为strtol可以更好地处理故障。

您的代码有几个问题:

  • 正如KingsIndian已经提到的,您在 main 函数的 argv 参数前面缺少一个 * 。 “主要功能”维基页面包含有关此的更多详细信息。

  • atoi用于将字符串数字转换为整数。 我想这不是你想要的。 argv[x]已经是字符串(char *),所以可以直接使用。

  • 如果你直接使用它,你不能修改它的内容(我相信是不允许的)。 因此,您需要制作副本。 使用strlen()找出argv[1]的长度,使用malloc()创建缓冲区并使用strcpy()复制它:


#include <stdio.h>
#include <stdlib.h>  
#include <ctype.h>
#include <string.h>

int main(int argc, char *argv[])
{
  char *word = malloc(strlen(argv[1]) + 1);
  strcpy(word, argv[1]);
  int i;
  for (i = 0; word[i]; i++)
    word[i] = tolower(word[i]);

  printf("Here is the new word: %s\n", word);
  return 0;
}

补充说明:

  • 如果您使用argc检查给定命令行参数的数量会更好(更健壮)!

  • 理论上malloc()可以返回 0,表明声明内存确实失败了。 所以你应该检查一下。

  • 如果只想打印小写世界,则不需要先转换再打印。 相反,您可以直接打印每个转换后的字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM