我有以下简单的c程序我试图在CLion中运行但是告诉我我的char需要是一个指针,我已经设置为指针并声明为数组abc所以我不确定是什么问题是或如何调试它!代码最初是一个演讲样本,我添加了指针声明,看看运行时会发生什么。任何帮助将是欣赏。
#include <stdio.h>
#include <stdint.h>
int main() {
char *a;
char abc[5];
a = abc;
int i = 0;
while (1 == scanf("/%[^/ \t\n]", a[i++]))
printf(">%s<\n", a[i-1]);
}
答案 0 :(得分:3)
即使a
是指针,a[i++]
也不是。一般来说,a[x]
相当于*(a + x)
,因此在您的情况下就好像您有*(a + i++)
,其中*
取消引用指针。您可以使用&a[i++]
将其重新转换为指针,或a + i++
。
答案 1 :(得分:1)
scanf
需要一个指针来将扫描结果放入。这是因为在C中,参数是按值传递的,因此无法以调用者将看到的方式写入。我们通过将指针传递给原始变量来解决这个问题,然后被调用的函数可以直接以调用者将看到的方式写入原始变量。尝试更改:
while (1 == scanf("/%[^/ \t\n]", a[i++]))
到
while (1 == scanf("/%[^/ \t\n]", a + i++))