如何将char*数组保存在C中的堆栈中

Ale*_*ern 0 c c++ unix linux

char *file1charbuf=(char*)malloc(sizeof(char));
char *file2charbuf=(char*)malloc(sizeof(char));
Run Code Online (Sandbox Code Playgroud)

在循环直到EOF我读焦炭引入*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);
}
....
Run Code Online (Sandbox Code Playgroud)

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

char *file1charbuf[1]; //1 element array of char
char *file2charbuf[1];
Run Code Online (Sandbox Code Playgroud)

与那个比较不起作用

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

和第二个问题.是否有必要close(file1),如果exit(1)发现了什么?

  • 我应该只使用sys调用,而不是lib函数.

unw*_*ind 5

你正在展示的代码存在很多问题,我担心:

  1. 不要malloc()在C中强制转换返回值.
  2. sizeof (char) C总是1,所以像这样使用它是没有意义的.
  3. 当你看起来意味着字符数组时,你正在声明指向字符的指针数组.

    char *file1charbuf[1]; //1 element array of char 应该是
    char file1charbuf[1]; /* 1-element array of char */,当然,只是
    char file1charbuf; /* 1-character buffer. */

  4. 你正在read()使用1字节缓冲区,这是非常低效的.

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

  • @jszakmeister那个编译器不是C编译器.在C中,`sizeof(char)`总是**一个.`CHAR_BIT`可能因系统而异,但`sizeof`运算符返回类型中的`char`s数或表达式的类型.`char`中有多少`char`s? (3认同)