C代码中使用演示参数的问题确实处理了argv中的字符串

问题描述 投票:0回答:1

我有一个C代码显示一个参数的小写字母:从命令行使用超过6个参数调用时,此代码可以正常运行但是,如果不带参数调用,演示部分将无法正常工作,并且程序将卡住:

下面是代码文件:

谁能帮我,谢谢!

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

int showLowerCase(char *argv[]){
            char* aStr = argv[6];
            //To lowercase: the demo got stuck probably here
            for (int i = 0; aStr[i]; i++) {
                aStr[i] = tolower(aStr[i]);
            }
            printf("a lower case for 6th input string: %s\n",aStr);
}

int main(int argc, char *argv[])
{
        if(argc < 7){
            // when no srguments given, try a demo:
            // change argc to 7
            argc = 7;
            // make a example of argv2 with 7 strings
            char *argv2[7];
            argv2[0] = "killWindowsVersatile.exe";
            argv2[1] = "key";
            argv2[2] = "ci";
            argv2[3] = "once";
            argv2[4] = "2";
            argv2[5] = "1000";
            argv2[6] = "SuperCol"; //this argument will be shown as lowercase
            showLowerCase(argv2);
            return 0;
        }
        showLowerCase(argv);
        return 0;
}

似乎argv可以在现场修改为小写,而我构建的argv2无法修改。

argv
1个回答
0
投票
由strcpy解决:

int showLowerCase(char *argv[]){ printf("aStr = argv[6]\n"); char* aStr = argv[6]; printf("aStr = argv[6]...done"); //make hard copy char newStr[strlen(aStr)+1]; strcpy(newStr,aStr); //To lowercase for (int i = 0; newStr[i]; i++) { printf("i=0\n"); printf("%c\n",newStr[i]); newStr[i] = tolower(aStr[i]); } printf("a lower case for 6th input string: %s\n",newStr); }

© www.soinside.com 2019 - 2024. All rights reserved.