4

我正在编写一些应用程序,它将与我的自定义 USB 串行设备进行通信(只写)。它是 Cocoa (OS X) 应用程序,与本文相关的部分以 POSIX 风格编码。

我已经解决了大部分问题,但遇到了 NULL (0x00) 字符的问题。

例如,让我们说我需要将 5 个字符添加到文件中。

我的代码如下:

char stringAsChar[5];

stringAsChar[0] = 0x77;
stringAsChar[1] = 0x44;
stringAsChar[2] = 0x00; //here is an problem
stringAsChar[3] = 0x05;
stringAsChar[4] = 0xFF;
...
fputs(stringAsChar, file); // write to file

指定索引处的每个字符代表目标设备中某些寄存器的数据。

当流包含我需要作为数据的 0x00 字符时,会出现问题,在那里停止写入(0x00 解释为流的停止)。

如何克服这个问题?

4

3 回答 3

4

尝试fwrite改用。它允许您指定写入流的字节数。或者遍历你的角色并使用fputc.

于 2013-05-21T12:46:40.300 回答
3

fputs()适用于以空字符结尾的字符串。您不能在 C 字符串中嵌入 NULL,因为它是终止符。您可以使用fputc()将 NULL 字节写入文件。

于 2013-05-21T12:46:14.953 回答
3

fputs适用于NUL- 终止的字符串。如果要将NUL字符写入文件,则可以fwrite改用:

noOfBytesWritten = fwrite(stringAsChar, 1, noOfBytesToWrite, file);
于 2013-05-21T12:50:07.523 回答