C-分析char*进入令牌中的segfault



我正在尝试在任意索引周围解析字符串。在我最简单的测试程序中,我可以提出一个输入字符串,然后读取输入,然后进行纪念以解析字符串。

用于测试此内容,我将"此文本"作为输入输入。readInput是一个函数,我只能调用getline(& input,size,stdnin)并返回输入指针。

int main(){
    char *input;
    input = readInput();
    int parseAround = 4;
    char *token1;
    char *token2;
    memcpy(token1, inputBuffer, 4);
    printf("token: %sn", token1); //prints "this"
    memcpy(token1, inputBuffer + (parseAround+1), 4);
    //when changed to memcpy(token2,...); segfaults
    printf("token: %sn", 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: %sn", token1); //prints "Hello"
    memcpy(token2, (input+6), 5);
    printf("token: %sn", token2); //prints "world"
    free(input);
    return 0;
}

在行中阅读,为每个字符串部分分配内存,然后将您想要的零件复制到s

相关内容

  • 没有找到相关文章

最新更新