gpt4 book ai didi

C,函数没有被调用,原型(prototype)在 main() 之前

转载 作者:行者123 更新时间:2023-11-30 14:33:15 25 4
gpt4 key购买 nike

这是一个硬件分配,用于复制文件并使用系统调用检查内容是否相同。

在包含语句之后我有一个原型(prototype):

#include <stdio.h>
#include <stdlib.h>
//three includes to use open
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h> //system calls if sys/syscalls.h does not work
//this give specific error code
#include <errno.h>
extern int errno;

void check_same(char *argv1, char *argv2);

然后我的主要功能:

int main(int argc, char* argv[]){
//mimic fd[0] for read and fd[1] for write
int fd0, fd1;
//return value from read greater than 0 is ok, 0 is EOF, <0 is an error
int num_bytes;
//BUFSIZ is 4096 or can be set to 1024, etc but larger is more efficient (bytes)
char buf[BUFSIZ]; //char *buf for read and write, tracks file pos.
.
.
.
/*function gets called after I copy the file and close the file descriptors*/
if((close(fd1)) <0){
printf("Write file not closed\n");
exit(1);
}

//compare 2 files for sameness
//int same = 0;
check_same(argv[1], argv[2]);

return 0;
}

然后是函数定义:

void check_same(char *argv1, char *argv2){
printf("in check_same\n");
//to open files and count bytes read
int f0, f1, count;
//position in each file
int pos1, pos2;
//buffer size 1 to check each char
char orig[1];
char copy[1];
.
.
.

第一个printf()语句没有显示在控制台上,所以我知道它甚至没有到达那里。

我尝试将返回类型更改为 int但从文件argv[1]中获得成功复制的相同结果提交 argv[2]但功能check_same()没有被叫到。我还应该检查什么?如需完整的可重现示例,请参阅链接的评论。

最佳答案

在问题中未包含的代码中,您的 if 语句缺少大括号:

if((write(fd1, buf, num_bytes))!=num_bytes)
printf("Write error %d\n", num_bytes);
exit(1);

这意味着它总是在到达那里时退出。

如果您使用 gcc,您可以使用 -Wall 收到有关此问题的警告。 (至少始终将 -Wall 传递给您的编译器。)

关于C,函数没有被调用,原型(prototype)在 main() 之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59441181/

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