我正在尝试解析任意索引周围的字符串。在我最简单的测试程序中,我可以想出我有一个输入字符串,我读取输入,然后执行memcpy来解析字符串。
为了测试这个,我输入“this text”作为输入。 readInput是一个函数,我只需要调用getline(& input,& size,stdnin)并返回输入指针。
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时,我遇到了分段错误。这是为什么?
答案 0 :(得分:1)
您很可能需要为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
中