You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言链表打印单个字符报错,如何正确输出目标字符?

C语言双向链表打印单个字符报错问题分析

完整代码

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

struct data{ 
    char help[5];
    struct data *next;
    struct data *prev;
}*head = NULL, *tail = NULL, *curr = NULL, *temp = NULL;

void backpush(char input[5]){
    curr = (struct data*) malloc(sizeof(struct data));
    strcpy(curr->help, input);
    if(head == NULL){
        head = tail = curr;
        head->next = NULL;
        head->prev = NULL;
    }
    else{
        tail->next = curr;
        curr->prev = tail;
        curr->next = NULL;
        tail = curr;
    }
}

int main(){
    char code[][5] = {"7R", "4R", "6B", "0B", "8R", "5R", "3B"};
    for(int i = 0;i<7;i++){
        backpush(code[i]);
    }
    // 引发报错的代码
    curr = head;
    printf("%s", curr->help[0]);
}

报错原因

核心是格式符与参数类型不匹配:

  • printf的%s格式符要求传入字符串首地址(char*类型),它会从该地址开始打印直到遇到终止符\0。
  • curr->help[0]是help字符数组的第一个元素,类型为char,它的值是字符'7'的ASCII码(0x37)。当你把这个值传给%s时,printf会把0x37当成内存地址去访问,属于非法内存操作,直接触发程序崩溃。

修正方法

如果只想打印头节点help字段的第一个字符,改用%c格式符:

curr = head;
printf("%c", curr->help[0]); // 正确输出'7'

如果要打印完整的"7R"字符串,直接传curr->help(数组名会隐式转换为字符串首地址):

curr = head;
printf("%s", curr->help); // 输出'7R'

内容的提问来源于stack exchange,提问作者Fernando Gunawan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:05:11