gpt4 book ai didi

c++ - 如果将 char * 数组保存在 C 中的堆栈中,如何比较它

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:53:00 25 4
gpt4 key购买 nike

char *file1charbuf=(char*)malloc(sizeof(char));
char *file2charbuf=(char*)malloc(sizeof(char));

在循环中直到 EOF 我将 char 读入 *file1charbuf*file2charbuf 然后比较。

...
check=read(file1, file1charbuf, 1);
check2=read(file2, file2charbuf, 1);
if (*file1charbuf!=*file2charbuf){
printf("differ: char %i, line %i\n",charpos,linepos);
exit(1);
}
....

比较工作正常,但我想将指针保留在堆栈中,而不是堆中。 malloc 也是 C lib 函数。

char *file1charbuf[1]; //1 element array of char
char *file2charbuf[1];

那个比较行不通

...
if (file1charbuf[0]!=file2charbuf[0]){
printf("differ: char %i, line %i\n",charpos,linepos);
exit(1);
}
...

第二个问题。如果找到exit(1),是否需要close(file1)

  • 我应该只使用系统调用,而不是库函数。

最佳答案

恐怕您显示的代码存在很多问题:

  1. Don't cast the return value of malloc(), in C .
  2. sizeof (char) 在 C 中总是 1,所以这样使用它是毫无意义的。
  3. 当您似乎指的是字符数组时,您正在声明指向字符的指针数组。

    char *file1charbuf[1];//1个char元素数组应该是
    char file1charbuf[1];/* char 的 1 元素数组 */ 或者,当然,只是
    字 rune 件1charbuf;/* 1 个字符的缓冲区。 */

  4. 您正在使用 1 字节缓冲区执行 read(),这非常低效。

  5. 要比较超过 1 个字符的字符数组(不一定是字符串,即不必以零结尾),请使用 memcmp()
  6. 最好在调用exit() 之前对所有打开的文件描述符调用close()。在大多数操作系统上,进程的死亡将导致其所有资源被回收,但最好明确地这样做。如果文件 I/O 使用缓冲的基于 FILE* 的调用,则没有必要,因为它们在所有环境中都由 exit() 自动关闭。<

关于c++ - 如果将 char * 数组保存在 C 中的堆栈中,如何比较它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16119630/

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