我试图从字符串(char *)逐行读取。我尝试从在线阅读的内容中实现它,但它无法正常工作。我编写了这个测试代码,以使其在我的项目代码之外工作,并且它仍然无效(在第一个readline调用时出现seg错误)。
提前感谢您的帮助!
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
static void parse_message(char *message);
static void readline(char *message, char *line, int *counter);
int main(int argc, char *argv[]){
printf("starting\n");
char *message1 = "Chat {\nHey what's up do you like zebras?\n}\n";
parse_message(message1);
printf("Finished\n");
return EXIT_SUCCESS;
}
static void parse_message(char *message){
char *line = (char *) malloc (50 * sizeof(char));
int *counter = 0;
readline(message, line, counter);//read in first line
if(strcmp(line, "CHAT {") == 0){
readline(message, line, counter); //read in message
printf("%s",message); //print message
readline(message,line,counter); //read in close bracket
} else{
printf("Error occurred\n");
}
}
static void readline(char *message, char *line, int *counter){
int index = 0;
while(message[*counter] != '\n'){
line[index] = message[*counter];
counter++;
index ++;
}
}
答案 0 :(得分:1)
有一些错误。
在parse_message中,您应该将“message”与“CHAT {”进行比较。此外,strcmp不会返回0,因为两个字符串不相同。请改用strncmp。
int * counter = 0表示指针为0.您应该只使用“int”并传递计数器的地址。
在readline()中,您需要null终止字符串。 * counter ++应该是(* counter)++。否则,您正在递增指针而不是指针的内容。
static void parse_message(char *message) {
char *line = (char *) malloc (50 * sizeof(char));
int counter = 0;
char *startline = "Chat {";
if(strncmp(message, startline, strlen(startline)) == 0){
readline(message, line, &counter); //read in message
printf("%s",message); //print message
readline(message,line,&counter); //read in close bracket
} else{
printf("Error occurred\n");
}
}
static void readline(char *message, char *line, int *counter){
int index = 0;
while(message[*counter] != '\n'){
line[index] = message[*counter];
(*counter)++;
index ++;
}
line[index] = 0;
}