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