#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
答案 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
也可以。