我有一个使用数组实现堆栈的代码,这里是完整的代码:here
这种情况就是为什么我不能推送多个字符,但是只有一个字符?但我一直在点击一些变量使用 struct
为她的推送初始化数组形式的一些字符:
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
声明),""
中的任何内容都表示一个字符串,它是char
的空终止数组。
您不能将 char
数组分配给单个 char
变量,因此您会看到警告。
警告的解释:
警告:传递 'push' 的参数 1 从指针生成整数而无需强制转换
为了解释起见,假设编译器在说 int
时表示 char
,那么基本上它是在提示您正在尝试分配 char
数组类型转换为 char
,而不明确告诉编译器您想要这样做。
做你正在尝试的事情的正确方法:
将字符串一个字符一个字符地传递给在循环内调用的 push
函数。
我是一名优秀的程序员,十分优秀!