好的,我现在已经花了大约一天半的时间研究这段代码,并且发现我已经弄明白为什么它不起作用了。
1 - 说我将参数传递给参数(但执行正常)
2 - 仅将char*
的第一个字母推送到堆栈而不是整个字符串
#include <stdio.h>
#include <stdlib.h> //malloc and free
#include <limits.h>
#include <ctype.h>
#include <string.h>
char* getMooki();
void push(char* val, char* val2, int a);
void printStack();
void error(char* msg);
typedef struct node{
char* data;
char* date;
int p_price;
struct node *pNext;
}node;
node *pTop = NULL;
int main(int charc, char* argv[]){
int pushVal = 2;
push("Light","Best", 1);
printStack();
push("Moon","Good", 2);
printStack();
char* good;
good = getMooki();
push(&good,"tada", 3);
printStack();
good = getMooki();
push(&good,"work please", 4);
printStack();
}
void push(char* val, char* val2, int a){
if(pTop == NULL){
pTop = malloc(sizeof(node));
pTop -> data = val;
pTop -> date = val2;
pTop -> p_price = a;
pTop -> pNext = NULL;
}else{
node *pNew = malloc(sizeof(node));
pNew -> data = val;
pNew -> date = val2;
pNew -> p_price = a;
pNew -> pNext = pTop;
pTop = pNew;
}
}
void printStack() {
//get temporary pointer:
node *pTemp = pTop;
if (pTemp == NULL) {
error("Print error: stack empty");
return;
}
//walk down the stack, printing each value:
do {
printf("%s ", pTemp -> data);
printf("%s ", pTemp -> date);
printf("%d \n", pTemp -> p_price);
pTemp = pTemp -> pNext;
} while (pTemp != NULL);
printf("\n");
}
void error(char* msg) {
printf("%s\n", msg);
}
char* getMooki(){
char* input;
printf("Enter your string: ");
scanf("%s", &input);
return input;
}
好的,我上面的代码工作了一些......我知道我有一个内存/指针问题,我很难找到我正在尝试做的相关文档,因为它涉及传递一个char *在C中,当我运行上面的代码
时会发生这种情况1 - 如果我没有将它作为地址(&amp;)传递给我的堆栈推送功能,那么当我输入我的字符串并按回车键后,我会收到分段错误。如果我离开&amp;它将传递并将新数据推入堆栈。
2-当我要求第二个字符串插入堆栈时,它会更改前一个节点和堆栈中节点的数据。
逻辑上我正在将相同的地址传递给堆栈,因此节点的数据自然会指向新数据所带来的好处。但如果我没有将其作为地址传递,我会得到分段错误11
对于noob问题很抱歉,但是我已经花了几天时间才开始通过论坛和youtube视频进行挖掘。把它写在纸上等等。
答案 0 :(得分:-1)
char* getChar(string prompt)
{
#define BUFFER_LEN (32)
char buffer[BUFFER_LEN + 1] = {0}; // keep a space for '\0'
int inputlen = 0;
char *input;
printf(" %s", prompt);
scanf(" %32s", buffer);
inputlen = strlen(buffer);
input = malloc(inputlen + 1);
// assert input != NULL
memset(input, 0, inputlen + 1);
strcpy(input, buffer);
return input;
}