![](/img/trans.png)
[英]How to count the characters of a string and assign them to different groups (lower case & upper case) in 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.