堆栈:无法将几个字符推入数组

我有一个使用数组实现堆栈的代码,这里是完整的代码: 这里

这个案例就是为什么我不能推出多个角色,而只能推出一个角色? 但我一直在点击一些变量,使用struct初始化她为数组forms推送一些字符:

 struct stackMhs { char nama[10]; char npm[10]; char telp[10]; int size; }; struct stackMhs stackMhsbaru; 

这是带有参数的push()函数,该参数将是函数main()的数据内容:

 void push(char nm, char np, char tel) { if(stackMhsbaru.size != 10) { stackMhsbaru.nama[stackMhsbaru.size + 1] = nm; stackMhsbaru.npm[stackMhsbaru.size + 1] = np; stackMhsbaru.telp[stackMhsbaru.size + 1] = tel; stackMhsbaru.size++; } else { printf("stack is full!"); } } 

问题是当我使用'填充数据时, push()函数中只有一个字符如push('a','b','c'); 在编译时没有错误,但是当我使用"push("aa","bb","cc");当发生编译错误时:

 main.c: In function 'main': main.c:60:6: warning: passing argument 1 of 'push' makes integer from pointer without a cast [-Wint-conversion] push("aa", "bb", "cc"); ^ main.c:23:6: note: expected 'char' but argument is of type 'char *' void push(char nm, char np, char tel) { ^ main.c:60:12: warning: passing argument 2 of 'push' makes integer from pointer without a cast [-Wint-conversion] push("aa", "bb", "cc"); ^ main.c:23:6: note: expected 'char' but argument is of type 'char *' void push(char nm, char np, char tel) { ^ main.c:60:18: warning: passing argument 3 of 'push' makes integer from pointer without a cast [-Wint-conversion] push("aa", "bb", "cc"); ^ main.c:23:6: note: expected 'char' but argument is of type 'char *' void push(char nm, char np, char tel) { ^ 

我的问题是:任何解决方案?

在C中, ''中的任何内容都是一个字符(使用char声明),而""内的任何内容都表示一个字符串,它是一个以null结尾的char数组。

您不能将char数组分配给单个char变量,因此您会看到警告。

警告说明:

warning: passing argument 1 of 'push' makes integer from pointer without a cast

为了便于解释,假设编译器在表示int时表示char ,那么基本上它抱怨您正在尝试将char数组类型分配给char而不明确告诉编译器您要这样做。

正确地做你正在尝试的方法:

将字符串逐个字符传递给循环内部调用的push函数。

首先,您应该尝试更多地关注代码缩进,我们会更容易阅读它。

现在,针对您的问题: 'c'"c"之间'c' C存在巨大差异。 第一个是一个字符,第二个是空终止的字符数组 ,这是完全不同的。

当你调用push("aa", "bb", "cc"); ,你给需要3个字符的函数提供了3个字符数组,这就是你的代码不起作用的原因。

要绕过此function,您可以使用字符数组的所有不同字符多次调用函数:

 char *str = "foo"; while (*str) push(*(str++)); 

这样, while将在你的字符串中循环并调用push()函数将str所有可用字符。

当你使用opeator []时,你得到一个指向char的指针,如果你想将它用于char *就这样使用它

 struct stackMhs { char* nama[10]; char* npm[10]; char telp[10]; int size; }; void push(char* nm, char* np, char* tel) { if(stackMhsbaru.size != 10) { if(!nm)strcpy(stackMhsbaru.nama[stackMhsbaru.size + 1],nm); if(!np)strcpy(stackMhsbaru.npm[stackMhsbaru.size + 1],np); if(!tel)strcpy(stackMhsbaru.telp[stackMhsbaru.size + 1],tel); stackMhsbaru.size++; } }