将 char* 解析为标记时出现段错误

Segfault in parsing char* into tokens

我正在尝试围绕任意索引解析字符串。在我最简单的测试程序中,我可以想出我有一个输入字符串,我将输入读入,然后执行 memcpy 来解析该字符串。

为了测试这个,我输入 "this text" 作为输入。 readInput 是一个函数,我只是让它调用 getline(&input, &size, stdnin) 和 return 输入指针。

int main(){
    char *input;
    input = readInput();

    int parseAround = 4;
    char *token1;
    char *token2;

    memcpy(token1, inputBuffer, 4);
    printf("token: %s\n", token1); //prints "this"

    memcpy(token1, inputBuffer + (parseAround+1), 4);
    //when changed to memcpy(token2,...); segfaults
    printf("token: %s\n", token1); //prints "text"


    free(input);
    return 0;
}

但是,当我将第二个 memcpy 更改为使用 token2 而不是 token1 时,出现分段错误。这是为什么?

您很可能需要为 token1 分配内存。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    char *input = NULL;

    size_t len = 0;
    ssize_t read;

    /* Read in the line "Hello world" */
    read = getline(&input, &len, stdin);
    printf("Retrieved line of length %zu :\n", read);
    printf("%s", input);

    /* Allocate memory for both parts of the string */
    char *token1 = malloc((read+1) * sizeof(char *));
    char *token2 = malloc((read+1) * sizeof(char *));

    memcpy(token1, input, 6);
    printf("token: %s\n", token1); //prints "Hello"

    memcpy(token2, (input+6), 5);
    printf("token: %s\n", token2); //prints "world"

    free(input);
    return 0;
}

读入行,为每个字符串部分分配内存,然后将你想要的部分复制到你的s中