gpt4 book ai didi

c - 字符串读/写时出错

转载 作者:行者123 更新时间:2023-11-30 21:12:46 25 4
gpt4 key购买 nike

以下程序用于将字符串写入文件当我使用 gcc 编译时,它显示错误

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

int main() {
FILE *fp;
char s[80];
fp = fopen("POEM.TXT", "w");
if(fp == NULL) {
puts("Cannaot open file");
exit(1);
}
printf("\n Enter");
while(strlen(gets(s)) > 0) {
fputs(s, fp);
fputs("\n", fp);
}
fclose(fp);
return 0;
}

编译时的错误是

gcc expi.c
expi.c: In function ‘main’:
expi.c:18:14: warning: implicit declaration of function ‘gets’ [-Wimplicit-function-declaration]
while(strlen(gets(s))>0)
^
expi.c:18:14: warning: passing argument 1 of ‘strlen’ makes pointer from integer without a cast [-Wint-conversion]
In file included from expi.c:2:0:
/usr/include/string.h:394:15: note: expected ‘const char *’ but argument is of type ‘int’
extern size_t strlen (const char *__s)
^
/tmp/ccHMKvW7.o: In function `main':
expi.c:(.text+0x87): warning: the `gets' function is dangerous and should not be used.

代码未编译,它是教科书代码,我无法运行它。它创建一个文件,但不向其中添加运行时文本

最佳答案

首先,不要使用gets()。这是一个非常危险的函数,因为存在数组溢出的巨大风险,而且它已从最近的 中删除。标准 .

此外,您应该了解 strlen() 的工作原理以及 的工作原理。被代表。你,可以做完全相同的事情

while (strlen(string) > 0)

只要写

while (string[0] != '\0')

但为此你需要了解什么是 是。并且您应该检查在这两种情况下 string 都不是 NULL 指针。

也许这就是你想要的

while (fgets(s, sizeof(s), stdin) != NULL) ...

并不是说 fgets() 基本上是 gets() 的功能,其实现方式可以安全地避免缓冲区溢出。

关于c - 字符串读/写时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39460575/

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