I’m creating a serial port reader program using the GTK API with C. I’m encountering an issue where the original string received from the serial port loses its first character after splitting it into substrings.
while (1) {
memset(buffer, 0, sizeof(buffer));
int len = read(fd, buffer, sizeof(buffer)-1);
if (len > 0) {
buffer[len] = '';
printf("Received: %sn", buffer);
gtk_text_buffer_get_end_iter(data->codedDataBuff, &iter);
gtk_text_buffer_insert(data->codedDataBuff, &iter, buffer, len);
char splittedBuffer[5][1024];
int dataIndex = 0;
int bufferIndex = 0;
printf("len is %dn", len);
for (int i = 0; i < len; i++){
if(buffer[i] == ';'){
splittedBuffer[dataIndex][bufferIndex] = '';
dataIndex ++;
bufferIndex = 0;
}else{
splittedBuffer[dataIndex][bufferIndex] = buffer[i];
bufferIndex++;
}
}
printf("data0 : %sn",splittedBuffer[0]);
printf("data1 : %sn",splittedBuffer[1]);
printf("data2 : %sn",splittedBuffer[2]);
printf("data3 : %sn",splittedBuffer[3]);
printf("data4 : %sn",splittedBuffer[4]);
printf("after op: %sn", buffer);
gtk_text_buffer_set_text(data->data0Buff,splittedBuffer[0], -1);
gtk_text_buffer_set_text(data->data1Buff,splittedBuffer[1], -1);
gtk_text_buffer_set_text(data->data2Buff,splittedBuffer[2], -1);
gtk_text_buffer_set_text(data->data3Buff,splittedBuffer[3], -1);
gtk_text_buffer_set_text(data->data4Buff,splittedBuffer[4], -1);
sleep(1);
GtkAdjustment *adjustment = gtk_scrolled_window_get_vadjustment(data->scrolledWin);
gtk_adjustment_set_value(adjustment, gtk_adjustment_get_upper(adjustment) - gtk_adjustment_get_page_size(adjustment));
} else if (len < 0) {
perror("Error reading from serial port");
}
}
(If you’d like to see the complete code, please feel free to ask it in the comments.)
I’d appreciate any insights into why the first character is disappearing after splitting.
an the output is;
Received: 23;10;20;30;40;
len is 16
data0 : 23
data1 : 10
data2 : 20
data3 : 30
data4 : 40
after op:
3;10;20;30;40;
Received: 24;10;20;30;40;
len is 16
data0 : 24
data1 : 10
data2 : 20
data3 : 30
data4 : 40
after op:
4;10;20;30;40;