我正在尝试附加一个包含特定字符的字符串。我从我的信念中得到了一个段错误,因为我试图附加到一个内存地址,我不知道如何改变它。
以下是我在调试时显示的错误
print:6
要附加的词: Z H E
分段错误(核心转储)
这是与segfault相对应的代码
void append(char* s, char c){
printf("print: 5\n");
int len = strlen(s);
printf("print: 6\n");
printf("word to be appended: %s\n", s);
s[len] = c;
printf("print: 7\n");
s[len+1] = '\0';
}
这是对上面函数的调用是在这组代码的底部与相应的变量初始化
int x;
char *tempLine = NULL;
char *token = NULL;
char *punctuationChar;
size_t length = 0;
int charCount = 0;
char *word;
int i;
int p;
int check = 0;
struct node *curr = NULL;
struct node *newNode = NULL;
(*head) = malloc(sizeof(struct node));
curr = (*head);
rewind(stream);
for(x = 0; x < size; x++){
getline(&tempLine, &length, stream);
token = strtok(tempLine, " ");
if(x == 0){
charCount = strlen(token);
curr -> word = malloc(charCount *(sizeof (char)) + 1);
strcpy(curr -> word, token);
token = strtok(NULL, " ");
}else{
while(token != "\n"){
check = 0;
printf("token: %s\n", token);
charCount = strlen(token);
printf("print: 1\n");
//check for punctuation aka, last word on line
for(i = 0; i < charCount; i++){
printf("iteration: %d\n", x);
if(ispunct(token[i])){
printf("print: 2\n");
append(punctuationChar, token[i]);
check = 1;
答案 0 :(得分:2)
您致电append(punctuationChar, token[i])
,但punctionatChar尚未初始化。这会产生不确定的行为。
为了解决这个问题,让punctuationChar
指向一个正确分配的内存空间,用一个有效的字符串初始化,即一个带字符串终止字符的字符串;
要尝试一下,你可以简单地开始:
char tempBuffer[100] = "something to start with";
char* punctationChar = tempBuffer;
这不会解决程序流程中可能出现的问题;但它应该显示你的问题的根本原因。