分割核心错误c

Segmentation core error c

我对 C 编码不太熟悉,但我需要这个脚本来测试与微控制器的串行通信。我将以下代码写为:

int main() {

char *portname = "/dev/ttyACM0";
FILE *csv = fopen("~/Desktop/my.csv", "wb");

int fd = open(portname, O_RDWR | O_NOCTTY | O_SYNC);
if (fd < 0)
{
        //error_message ("error %d opening %s: %s", errno, portname, strerror (errno));
        return 1;
}

set_interface_attribs (fd, B9600, 0);  // set speed to 9600 bps, 8n1 (no parity)
set_blocking (fd, 1);                // set no blocking

char a = 255;
int i = 0;

write(fd, &a, 1);

do {
  char c;
  read(fd, &c, 1); // wait for next value
  fprintf(csv, "%d\n", c);
  i ++;
} while(i < 10000); //keep running this loop for a while

write(fd, &a, 1);
fclose(csv);
close(fd);
return 0;

这个脚本应该成功连接串行通信,发送一个起始位 (255) 到操作一些动作的接收器,然后开始将接收到的数据写入 csv 文件,直到 while 循环结束。已使用指令编译该源代码:

g++ -o serial c-serial.c

其中 c-serial.c 是源代码的名称。只需跳过两个 "set" 函数,它们在此范围内可见,因此不会出现错误。事实上,执行时我收到:

Segmentation fault (core dumped)

我该如何解决?

在您的 fprintf 语句中,您告诉程序打印一个整数(通常是两个字节),但提供一个 char 变量(一个字节)作为打印来源。 fprintf 依靠提供的格式字符串来决定从源中读取多少字节。在这种情况下,fprintf 尝试从一个单字节内存块中读取(至少)两个字节。因此 fprintf 将尝试访问甚至可能未分配给程序的内存,从而产生分段错误。

更正格式字符串以仅打印一个字符。 有关 fprintf 和格式字符串的更多信息,请参阅 here.

函数调用fopen is not able to resolve ~ as your home directory. Please take a look at how to open a file in user's home folder.