C - 将一个字符复制到另一个

C - Copying a char to another

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

您应该将 m 传递给 insert() 而不是 m[100]。在这种情况下,m[100] 表示 m 数组的单个元素,而不是数组本身。这就是 "integer to pointer without a cast" 警告的原因,因为 char 毕竟是一个整数。

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()returns控制到main()之后它已经不存在了.