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);
请注意,由于 stack
和 top
是作为参数传递的,因此无需将它们设为全局变量。
这是修改后的版本:
#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;
}
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);
请注意,由于 stack
和 top
是作为参数传递的,因此无需将它们设为全局变量。
这是修改后的版本:
#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;
}