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()
之后它已经不存在了.
我是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()
之后它已经不存在了.