提问人:Suhas Omkar 提问时间:6/23/2023 最后编辑:chux - Reinstate MonicaSuhas Omkar 更新时间:6/23/2023 访问量:105
函数“getline”的隐式声明
Implicit declaration of function 'getline'
问:
/文件复制:编写 C 程序以使用文件操作复制文件/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
FILE* fin, *fout;
fin = fopen("text.txt","r");
fout = fopen("write.txt","w+");
if(NULL == fin) {
printf("FILE not found!\n");
}
else {
size_t maxlen = 100;
char* ptr = (char*)calloc(maxlen, sizeof(char));
// ssize_t getline(char **lineptr, size_t *n, FILE *stream);
while(getline(&ptr,&maxlen,fin) != -1) {
fprintf(fout,"%s",ptr);
}
free(ptr);
}
fclose(fin);
fclose(fout);
return 0;
}
我在 vscode 编译器中使用函数,但它给出错误,如下所述 -getline()
警告:函数“getline”的隐式声明 [-Wimplicit-function-declaration] 20 |
while(getline(&ptr,&maxlen,fin) != -1){
答:
3赞
chux - Reinstate Monica
6/23/2023
#1
getline()
不是标准 C 库的一部分。
在编译并遵守 C 标准时,由于函数缺少原型,因此会出现类似“隐式声明函数'getline'”的警告。
也:
请勿使用 .1) 使用标准 C 库 I/O 重新编码或 2) 编写自己的 . 源代码并不难找到。
getline()
getline()
getline()
启用编译器选项以使用该扩展函数(如果存在)。(我不希望 Visual Studio Code 拥有它。
使用普通型,无需预先分配getline()
// size_t maxlen = 100;
// char* ptr = (char*)calloc(maxlen, sizeof(char));
size_t maxlen = 0;
char* ptr = NULL;
while(getline(&ptr,&maxlen,fin) != -1) {
fprintf(fout,"%s",ptr);
}
由于 OP 的目标是编写一个 C 程序来使用文件操作复制文件,因此更好的方法是以二进制模式打开文件并使用 .该方法假定文件缺少嵌入的 null 字符、可预测的行结尾和其他文本属性。fread()/fwrite()
getline()/fprintf()
// Sample unchecked code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
const char *ifilename = "text.txt";
FILE *fin = fopen(ifilename, "rb");
if (fin == NULL) {
fprintf(stderr, "Unable to open \"%s\" for reading.\n", ifilename);
return EXIT_FAILURE;
}
const char *ofilename = "write.txt";
FILE *fout = fopen(ofilename, "wb");
if (fout == NULL) {
fprintf(stderr, "Unable to open \"%s\" for writing.\n", ofilename);
return EXIT_FAILURE;
}
unsigned char buf[BUFSIZ];
size_t n_read;
while ((n_read = fread(buf, 1, BUFSIZ, fin)) > 0) {
size_t n_written = fwrite(buf, 1, n_read, fout);
if (n_written != n_read) {
fprintf(stderr, "Failed writing to \"%s\".\n", ofilename);
return EXIT_FAILURE;
}
}
fclose(fout);
if (ferror(fin)) {
fprintf(stderr, "Failed reading from \"%s\".n", ifilename);
return EXIT_FAILURE;
}
fclose(fin);
return EXIT_SUCCESS;
}
评论
0赞
chux - Reinstate Monica
6/23/2023
@SuhasOmkar 请查看 当有人回答我的问题时,我该怎么办?。
评论