C 通过'的参数1;fgets&x27;从不带强制转换的整数生成指针

C 通过'的参数1;fgets&x27;从不带强制转换的整数生成指针,c,fgets,C,Fgets,我运行了这段代码,我得到了以下错误,我做了一些研究,但我没有真正得到答案,我希望你们中的某个人能给我一些帮助。我是编程新手,如果我错过了太明显的东西,请原谅我 [警告]传递'fgets'的参数1会使指针从整数变为不带强制转换的整数 当我在“first”和“second”变量中添加一个“&”时,它会编译,但当我运行它时,我不会从键盘上得到我给出的字符串 如何使其编译?fgets期望char*指向缓冲区作为其第一个参数 int main(int argc, char *argv[]) { c

我运行了这段代码,我得到了以下错误,我做了一些研究,但我没有真正得到答案,我希望你们中的某个人能给我一些帮助。我是编程新手,如果我错过了太明显的东西,请原谅我

[警告]传递'fgets'的参数1会使指针从整数变为不带强制转换的整数

当我在“first”和“second”变量中添加一个“&”时,它会编译,但当我运行它时,我不会从键盘上得到我给出的字符串


如何使其编译?

fgets
期望
char*
指向缓冲区作为其第一个参数

int main(int argc, char *argv[]) {
    char first[80], second[80];

    printf("Give the first string: ");
    fgets(first, sizeof(char), stdin);
    printf("Give the second string: ");
    fgets(second, sizeof(char), stdin);
}

fgets
的意思是“从文件中获取字符串”,您需要一个字符数组来保存字符串。

您应该将第一个和第二个字符转换为指针,并分配空间来填充它们

int main(int argc, char *argv[]) {

int flen = 256;
int slen = 256;
 char* first = malloc(flen); //allocate enough space to handle verbose typists :)
 char* second = malloc(slen);
 int x;

 printf("%s\n","Give the first string: ");
 fgets(first,flen,stdin);

 printf("%s\n","Give the second string: ");
 fgets(second,slen,stdin);

//do something with first and second.

//free memory you allocated
free(first);
free(second);
};

first
不是数组…警告的存在是有原因的您在谈论sizeof(char)部分?也许对你有帮助。而且,单个字符就是单个字符。如果您阅读链接引用,您将看到使用
fgets
读取单个字符实际上需要至少三个字符的数组:一个用于实际字符,一个用于换行符,一个用于字符串终止符。@JoachimPileborg我想知道警告中的“from integer”部分是什么意思?我的意思是,OP调用
fgets
,第一个参数是
char
(不是
int
),对吗?@Dimitris是的。指向一个有效内存位置(
malloc
ed内存段,一个自动字符数组)的指针@Dimitris是的,指向一个缓冲区,还请注意,缓冲区还应该具有空终止字符的容量,因此不会将任何内容读入大小为1的缓冲区。看到一些参考资料了吗
int main(int argc, char *argv[]) {

int flen = 256;
int slen = 256;
 char* first = malloc(flen); //allocate enough space to handle verbose typists :)
 char* second = malloc(slen);
 int x;

 printf("%s\n","Give the first string: ");
 fgets(first,flen,stdin);

 printf("%s\n","Give the second string: ");
 fgets(second,slen,stdin);

//do something with first and second.

//free memory you allocated
free(first);
free(second);
};