段错误附加一个空字符串 C



我正在尝试附加一个带有特定字符的字符串。我从我认为的中得到一个段错误,因为我试图附加到内存地址,我不知道我将如何改变它。

这是我调试时显示的错误,

打印: 6

要附加的词:Z H E

分段故障(核心转储(

这是与段错误对应的代码

void append(char* s, char c){
        printf("print: 5n");
        int len = strlen(s);
        printf("print: 6n");
        printf("word to be appended: %sn", s);
        s[len] = c;
        printf("print: 7n");
        s[len+1] = '';
}

这是对上述函数的调用,位于这组代码的底部,带有相应的变量初始化

    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: %sn", token);
                    charCount = strlen(token);
                    printf("print: 1n");
                    //check for punctuation aka, last word on line
                    for(i = 0; i < charCount; i++){
                            printf("iteration: %dn", x);
                            if(ispunct(token[i])){
                                    printf("print: 2n");
                                    append(punctuationChar, token[i]);
                                    check = 1;

你调用append(punctuationChar, token[i]),但标点符号尚未初始化。这会产生未定义的行为。

为了克服这个问题,让我们punctuationChar指向一个正确分配的内存空间,该空间使用有效字符串初始化,即具有字符串终止字符的内存空间;

要尝试一下,您可以简单地从以下方面开始:

char tempBuffer[100] = "something to start with";
char* punctationChar = tempBuffer;

这不会解决程序流中可能的问题;但它应该显示问题的根本原因。

相关内容

  • 没有找到相关文章

最新更新