printf 不打印 C 中字符数组的值

printf not printing value of a character array in C

pop 函数中的 printf 语句不打印除空白字符 (space) 之外的任何内容。我试图打印在 pop 函数中传递的数组的索引,但发生了同样的事情。我似乎无法弄清楚为什么,有人可以帮助我吗?

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

char stack[400] = "";
int top = -1;

void push(char arr[], int *top, char val) {
    *top = *top + 1;
    arr[*top] = val;
    //printf("%d", *top);
} 

char pop(char arr[], int *top) {
    char temp;
    printf("\n%s\n", arr[0]);
    temp = arr[*top];
    *top = *top - 1;
    return temp;
}

int main() {
    push(stack, &top, 'a');
    push(stack, &top, 'b');
    push(stack, &top, 'c');
    //printf("%s", stack);
    pop(stack, &top);
    //printf("\n%s", *val);
    return 0;
}

您的程序因分段错误而崩溃。这是因为你在传入字符 arg[0] 时使用了 %s(for char *)。使用 %c 代替:

printf("\n%c\n",arr[0]);

如果要打印单个堆栈元素,可以使用 %d%c,如下所示:

char val = pop(stack, &top);
printf("stack top was %c (ASCII %d)\n", val, val);

如果要将整个堆栈打印为字符串,可以使用:

printf("stack: %.*s\n", top + 1, stack);

请注意,由于 stacktop 是作为参数传递的,因此无需将它们设为全局变量。

这是修改后的版本:

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

#define STACK_DEPTH  400

void push(char arr[], int *top, char val) {
    if (top < STACK_DEPTH - 1) {
        *top = *top + 1;
        arr[*top] = val;
    } else {
        fprintf(stderr, "stack full for '%c'\n", val);
    }
} 

char pop(char arr[], int *top) {
    if (top >= 0) {
        char temp = arr[*top];
        *top = *top - 1;
        return temp;
    } else {
        fprintf(stderr, "stack empty\n");
        return 0;
    }
}

int main() {
    char stack[STACK_DEPTH] = "";
    int top = -1;

    push(stack, &top, 'a');
    push(stack, &top, 'b');
    push(stack, &top, 'c');
    printf("stack contents: %.*s\n", top + 1, stack);

    char val = pop(stack, &top);
    printf("stack top was %c (ASCII %d)\n", val, val);
    return 0;
}