首页 > 解决方案 > 如何使用命令行参数输入数据并将数据转换为大写

问题描述

我试图弄清楚如何使用我在命令行中输入的数据并使用它将我的数据转换为大写字母。我是 C 的新手。这是代码。谁能告诉我我做错了什么?我正在尝试通过使用动态内存分配将任何小写单词转换为大写。

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


int main(int argc, char*argv[]){
int i;
char * string;
//Dynamic Memory Allocation

string = (char*)malloc(argc * sizeof(char));
for (i=1; i<argc; i++){
printf("%s\n",argv[i]);

}       

strcpy(string, argv[i]);

for (i = 1; string[i] != '\0'; i++){
    if(string[i] >= 'a' && string[i] <= 'z'){
        string[i] = string[i] - 32;
    }
}

return 0;
}

标签: ccommand-line-argumentsdynamic-memory-allocationuppercaselowercase

解决方案


有几个错误

  1. 首先

    string = (char*)malloc(argc * sizeof(char));
    

argc给出参数的数量,而不是字符串的长度。要获取argv[1]参数的长度,请使用strlen

len = strlen(argv[1]);
string = malloc (len+1);
  1. 第二

    strcpy(string, argv[i]);
    

argv[0]通常是程序名称。argv[1]将给出第一个参数的名称。您还可以添加检查argc以查看用户是否添加了参数。如果您要输入一个参数,则可以将其更改为,

if (argc == 2)
{
   strcpy(string, argv[1]);
}
else
{
   //report error to user
}
  1. 第三

您指的是从 1 开始的索引。在 C 中,索引从 0 开始。

for (i = 0; string[i] != '\0'; i++){
    if(string[i] >= 'a' && string[i] <= 'z'){
        string[i] = string[i] - 32;
    }
}

推荐阅读