c - 如何打开用户指定的 COM 端口?
问题描述
我正在尝试打开用户输入给出的 COM 端口。我尝试了以下代码并打印了错误消息“打开串行端口时出错”。
int main()
{
BOOL Status;
HANDLE ComPort;
char* ptr;
char str[] = {'\\','\\','\\','\\','.','\\','\\','C','O','M','\0','\0','\0','\0'};
printf("Enter COM Port: ");
ptr = str + 10;
fgets(ptr,4,stdin);
size_t len = strlen(str);
if (len > 0 && str[len-1] == '\n') {
str[--len] = '\0';
}
ComPort = CreateFile((const char*)str, //port name
GENERIC_READ | GENERIC_WRITE, //Read/Write
0, // No Sharing
NULL, // No Security
OPEN_EXISTING,// Open existing port only
0, // Non Overlapped I/O
NULL); // Null for Comm Devices
if (ComPort == INVALID_HANDLE_VALUE){
printf("Error in opening serial port");
exit(EXIT_FAILURE);}
else{
printf("opening serial port successful");
}
.....
...
那么我做错了什么?
解决方案
前缀'\\','\\','\\','\\','.','\\','\\'
是错误的。请参阅“\\.\COM10”
原始代码无法处理读取'\n'
.
读取一行,然后形成 com 端口名称。
//char* ptr;
//char str[] = {'\\','\\','\\','\\','.','\\','\\','C','O','M','\0','\0','\0','\0'};
//ptr = str + 10;
//fgets(ptr,4,stdin);
//ComPort = CreateFile((const char*)str,
char buffer[80]; // be generous
fgets(buffer, sizeof buffer, stdin);
buffer[strcspn(buffer, "\n")] = '\0'; // lop off potential \n
char str[sizeof buffer + 7] = "\\\\.\\COM"; // Use correct prefix
strcpy(str, buffer);
...
推荐阅读
- java - JVM Core Dump "_thread_blocked" 正常吗?
- yaml - 错误:预期
,但找到标量 - amazon-web-services - AWS API Gateway 自定义 URL 参数?
- mysql - SQL查询返回超出范围内允许数量的记录
- python - 如何将 tf.keras 与 bfloat16 一起使用
- android - 试用期结束时的 Google 实时通知
- amazon-web-services - 多个子网中的 Lambda 函数
- javascript - 如何将应用程序架构与 React 库解耦?
- oracle - PL/SQL 中的 Oracle 多级集合
- javascript - 简单的jquery HTTP请求不返回值