gpt4 book ai didi

c - 传递参数 1 从指针生成整数而没有强制转换警告

转载 作者:太空宇宙 更新时间:2023-11-04 07:58:32 25 4
gpt4 key购买 nike

我正在使用 CodeBlocks 并学习 C。我创建了这个简单的脚本作为学习函数的要点。我不理解我遇到的错误,因为我眼中的一切都匹配。

代码:

#include <stdio.h>
#include <string.h>

void SetPerson(char a, int b);

int main () {

char name[50];
int number[6];

printf("Enter Name: ");
scanf("%49s", name);

printf("Enter Number: ");
scanf("%5d", number);

SetPerson(name, number);

return(0);
}

void SetPerson(char a, int b) {
printf("Name: %s\n", a);
printf("Number: %d", b);
}

在编译器中我遇到了这些错误:

||=== Build: Debug in remove (compiler: GNU GCC Compiler) ===|
C:\Users\e\Desktop\c programs\remove\main.c||In function 'main':|
C:\Users\e\Desktop\c programs\remove\main.c|17|warning: passing argument 1 of 'SetPerson' makes integer from pointer without a cast [-Wint-conversion]|
C:\Users\e\Desktop\c programs\remove\main.c|4|note: expected 'char' but argument is of type 'char *'|
C:\Users\e\Desktop\c programs\remove\main.c|17|warning: passing argument 2 of 'SetPerson' makes integer from pointer without a cast [-Wint-conversion]|
C:\Users\e\Desktop\c programs\remove\main.c|4|note: expected 'int' but argument is of type 'int *'|
C:\Users\e\Desktop\c programs\remove\main.c||In function 'SetPerson':|
C:\Users\e\Desktop\c programs\remove\main.c|23|warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int' [-Wformat=]|
||=== Build finished: 0 error(s), 3 warning(s) (0 minute(s), 0 second(s)) ===|

编辑:

我按照建议更改了:

SetPerson(char *a, int b);

现在我遇到了这些错误:

||=== Build: Debug in remove (compiler: GNU GCC Compiler) ===|
C:\Users\e\Desktop\c programs\remove\main.c||In function 'main':|
C:\Users\e\Desktop\c programs\remove\main.c|17|warning: passing argument 2 of 'SetPerson' makes integer from pointer without a cast [-Wint-conversion]|
C:\Users\e\Desktop\c programs\remove\main.c|4|note: expected 'int' but argument is of type 'int *'|
||=== Build finished: 0 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|

最佳答案

name 是一个字符数组,但 SetPerson 的第一个参数是单个字符。将 SetPerson 更改为

void SetPerson(char* a, int b) {
printf("Name: %s\n", a);
printf("Number: %d", b);
}

请注意,在 C 语言中,数组和指针基本上可以互换。

编辑(修改问题后)

您基本上是在与数字相反地做同样的事情。您有一个整数数组(基本上是 int*,您要将其传递给 int 参数。

删除number声明的数组部分;你不是在告诉编译器分配一个 6 位数字(以 10 为基数),你是在告诉它分配 6 个 32 位(可能;现在 int 通常是 32 位,但可能不是)数字。

然后您需要更改 scanf 的参数以将 指针 传递给 number 而不是实际数字;为此使用寻址运算符 (&):

scanf("%d", &number);

关于c - 传递参数 1 从指针生成整数而没有强制转换警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48361429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com