从C中的命令行输入字符串或字符

时间:2017-09-20 12:05:21

标签: c command-line-arguments

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

int main(int argc, char *argv[]) 
{ 
    char str[1000], ch[100]; 
    int i, frequency = 0;
    strcpy(argv[1],str);
    strcpy(argv[2], ch);
    for(i = 0; str[i]!= '\0'; ++i) 
    { 
        if(ch[i] == str[i]) 
            ++frequency; 
    } 
    printf("Frequency of %c = %d", *ch, frequency); 
    return (0); 
}

成功编译。

输入:你好h 输出为:Somegarbage的频率= 2

4 个答案:

答案 0 :(得分:3)

你正在以错误的方向复制,原型是

get_staff_name = function(id) {
if (typeof StaffUsers != "object") {
    return "";
} else {
    $.each(StaffUsers, function(staff_id, name){
        if ( Number(staff_id)==Number(id) ) {
            return name;
        }
    });
}

return "NULL"; }

这很可能是未定义的行为。

此外,无需复制字符串,您可以像处理任何其他字符串一样处理参数。

答案 1 :(得分:0)

strcpy函数将第二个参数的值复制到第一个参数。如果要从命令行参数中使用或访问值(单个字符),那么它就像二维数组。

argv[1][0]

我在想你没有理解命令行参数。在命令行中,它并不意味着您键入数字,字符或字符串。它将始终作为字符串读取。因此,如果你有一些命令可以运行,如

./file-name 123 a myfile 3.14

以上所有内容的访问方式如下:

agrv [1] &#34; 123&#34; 的字符串。要访问第一个字符(&#39; 1&#39; ),我只会写 argv 1 [0]

agrv [2] &#34; a&#34; 的字符串。要访问第一个字符(&#39; a&#39; ),我只会写 argv 1 [0]

agrv [3] 是包含&#34; myfile&#34; 的字符串。要访问第一个字符(&#39; m&#39; ),我只会写 argv [3] [0]

agrv [4] &#34; 3.14&#34; 的字符串。要访问第一个字符(&#39; 3&#39; ),我只会写 argv [4] [0]

您还可以查看here以获取有关命令行参数的更多信息。

答案 2 :(得分:0)

您无需将整个字符串复制到另一个字符串中进行任何操作。

#include <stdio.h>

int main (int argc,char *argv[])
{
    if(argc==3)
    {
        int i, frequency = 0;
        for(i = 0; argv[1][i]!= '\0'; ++i)
        {
            if(argv[1][i] == argv[2][0])
                ++frequency;
        }
        printf("Frequency of %c = %d", argv[2][0], frequency);

    }
    else
        printf("Invalid no of inputs\n");
    return 0;
}

<强>输入:

hello h

<强>输出:

Frequency of h = 1

答案 3 :(得分:0)

正如unwind指出的那样,您正在使用strcpy()向错误的方向进行复制。

strcpy(argv[1],str);
strcpy(argv[2], ch);

应改为

strcpy(str, argv[1]);
strcpy(ch, argv[2]);

这就是我的老师教我的方式:从右到左。就像尤塞恩博尔特在摆出他着名的victory pose时所说的那样。他的右手指向左边。

strncpy()可用于避免溢出而不是strcpy()但如果源长度超过指定的大小,则\0不会将strncpy()附加到目标字符串

您似乎试图通过命令行将字符串和字符作为输入,并在字符串中查找该字符的出现次数。

如果是这种情况,假设argv[1]有字符串且argv[2]有字符, 如果argv[2]不是单个字符,则可能会显示错误消息。

if(strlen(argv[2])!=1)
{
    printf("\nError");
    exit(1);
}

您还应该检查提供的参数数量(程序名称除外)是否至少为2.例如,如果只给出了一个参数并且您尝试使用argv[2],则会导致错误

if(argc<3)
{
    printf("\nNo enough arguments");
}

程序名称计为argv[0]中的值。见here

char c=ch[0];
for(i = 0; str[i]!= '\0'; ++i) 
{ 
    if(c == str[i]) 
        ++frequency; 
} 
printf("Frequency of %c = %d", c, frequency); 

使用ch[0]代替c也可以。