2

文字列(char *)から1行ずつ読み取ろうとしています。オンラインで読んだものから実装しようとしましたが、機能しません。このテストコードを作成して、プロジェクトコードの外部で機能させるようにしましたが、まだ機能していません(最初のreadline呼び出しでのセグメンテーション違反)。

助けてくれてありがとう!

#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 ++;
    }   
}
4

1 に答える 1

1

いくつかの間違いがあります。

parse_message では、"message" を "CHAT {" と比較する必要があります。また、2 つの文字列が同一ではないため、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;
}
于 2013-02-25T04:28:10.437 に答える