C - 将char复制到另一个

时间:2017-05-14 00:23:26

标签: c char strcpy

我是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); 
}

2 个答案:

答案 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()后它不再存在。