我是C语言的初学者。我想将一个char数组复制到另一个,但我不能。我收到了这些错误:
Line 10 - [Warning] passing argument 1 of 'insert' makes pointer from integer without a cast
Line 4 - [Note] expected 'char *' but argument is of type 'char'
你能帮我找到这段代码中的错误吗?
#include <stdio.h>
#include <string.h>
void insert(char d[100]);
int main( ) {
char m[100];
scanf("%s", &m);
insert(m[100]);
return 0;
}
void insert (char d[100]) {
char s[200];
strcpy(s, d);
}
答案 0 :(得分:2)
您应该将m
传递给insert()
而不是m[100]
。在该上下文中,m[100]
表示m
数组的单个元素,而不是数组本身。这就是为什么&#34;整数指向没有演员&#34;警告,因为char
毕竟是一个整数。
答案 1 :(得分:1)
main()
的函数签名应该是以下之一:
int main(void) {}
或
int main(int argc, char *argv[]) {}
或等效,
int main(int argc, char **argv) {}
不需要在&
中使用带有数组参数的地址运算符scanf()
,因为数组在大多数表达式中衰减为指向其第一个元素的指针,包括函数调用。
请注意,在%s
转换说明符与scanf()
一起使用时,应指定最大字段宽度,以避免缓冲区溢出:
scanf("%99s", m);
将insert()
函数声明为:
void insert(char d[]);
调用insert()
函数时,只使用要作为参数传递的数组的名称;这会衰减到指向数组第一个元素的指针。值得指出的是,原始代码具有未定义的行为:
insert(m[100]);
这会尝试访问数组m[]
的索引100处的元素,该元素超出范围。
现在代码如下:
#include <stdio.h>
#include <string.h>
void insert(char d[]);
int main(void)
{
char m[100];
scanf("%99s", m);
insert(m);
return 0;
}
void insert (char d[])
{
char s[200];
strcpy(s, d);
}
现在,我不知道您打算如何处理复制的字符串s
,但在insert()
将控件返回main()
后它不再存在。