Я пытался имитировать концепцию стека, и это мой код, взрывает ошибки везде, отПочему я не могу получить ввод строки?
- самый первый
scanf
, - везде ссылающихся
char*
переменных, - и в конечном итоге указатель стека (Я назвал его
towerIndicator
) не меняется вообще. - И тогда каждый введенный ввод каким-то образом ввернут: если я наберу «+314», чтобы добавить 314 в стек, он в конечном итоге добавит 3144, если вся проблема выше была каким-то образом предотвращена при компиляции.
gcc не сообщает мне какое-либо полезное сообщение об ошибке, поэтому я не понимаю, куда идти. Отчаянно требуется помощь здесь.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
const int towerHeight = 32;
int tower[towerHeight];
int towerIndicator = 0;
/*
printf("%i개의 정수를 담을 수 있는 스택을 만들었습니다.\n", towerHeight);
printf("- '+'를 붙여서 정수를 담습니다.\n");
printf("- '-'를 입력해 정수를 빼냅니다.\n");
printf("- '?'를 입력해 스택을 확인합니다.\n");
printf("- '0'를 입력해 작업을 종료합니다.\n");
printf("명령을 입력해주세요.\n================================\n");
*/
char* command;
char* kindOfCommand[1];
char* actualCommand;
while(1) {
printf("> ");
scanf("%s", command);
printf("%s", command);
strncpy(*kindOfCommand, command, 1); kindOfCommand[1] = '\0';puts("#");
strncpy(actualCommand, command+1, strlen(command)-1);puts("$");
switch(**kindOfCommand) {
int i;
case '+':
if(towerIndicator<towerHeight) {
tower[towerIndicator] = atoi(actualCommand);
towerIndicator++;
printf("현재 %i개의 값이 있습니다.\n", towerIndicator);
} else printf("더 이상 넣을 곳이 없습니다.\n");
break;
case '-':
if(towerIndicator>0) {
towerIndicator--;
printf("%i\n", tower[towerIndicator]);
printf("현재 %i개의 값이 있습니다.\n", towerIndicator);
} else printf("더 이상 빼낼 값이 없습니다.\n");
break;
case '?':
default:
printf("[");
for(i=0; i<towerIndicator; i++) {
if(i==towerIndicator) printf("[%i]", tower[i]);
else printf("%i", tower[i]);
if(i!=towerIndicator-1) printf(" ");
}
printf("]\n");
break;
}
if(**kindOfCommand=='0') break;
}
}
У вас есть много неопределенных действий * в вашем коде, потому что у вас есть указатели, которые не указывают нигде. Когда вы определяете локальную переменную и не инициализируете ее, ее значение будет * неопределенным *, используя эту неинициализированную переменную, приводящую к указанному UB. Например, давайте возьмем вызов 'scanf ("% s ", command)' call. * Где * будет 'scanf' писать строку, которую он читает? Где «командные» точки, конечно, но если 'command' не указывает нигде, где будут записываться данные? –
Поэтому я попытался инициализировать их как «NULL», я тоже об этом заблуждаюсь. Скоро добавят эту ошибку в вопросе. – Dinir
Думаю, вам нужно сделать пару шагов назад и пройти курс указателя и массива. –