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

时间:2016-07-29 08:21:34

标签: c arrays stack

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

这就是为什么我不能推多个角色,但是 只有一个角色? 但我一直在点击一些变量,使用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) { ^ 发生编译错误时:

base_data['stemmed_stop_comments'] = []

if 'stemmed_comments' in base_data:
    base_data['stemmed_stop_comments'] = [word for word in base_data['stemmed_comments'] if not (word in stopWords)]

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

2 个答案:

答案 0 :(得分:2)

在C中,char内的任何内容都是一个字符(使用""声明),char内的任何内容都表示一个字符串,它是char s的空终止数组

您无法将char的数组分配给单个warning: passing argument 1 of 'push' makes integer from pointer without a cast变量,因此您会看到警告。

警告说明:

char

为了便于说明,假设编译器在int时表示char,那么基本上它正在抱怨您正在尝试将char数组类型分配给{{1}没有明确告诉编译器你想这样做。

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

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

答案 1 :(得分:1)

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

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

当您致电push("aa", "bb", "cc");时,您需要为需要3个字符的函数提供3个字符数组,这就是您的代码不起作用的原因。

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

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

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