几个问题:静态方法,数组

时间:2013-10-06 11:34:38

标签: c arrays static

我正在研究C中的一个项目并偶然发现了一些问题,希望你们能帮助我们!该项目只是操纵用户通过标准输入创建的坐标点。我在下面列出了不同的文件及其功能;

//points.h
struct Point{
   int x;
   int y;
}

//reads points from stdinput into our points array
int pointReader(struct Point points[]);

///////////////

//points.c
void pointReader(struct Point points[]){
   //points[] is originally empty array (filled with NULLS)
   struct Point point;
   char buffer[10];
   printf("X Coordinate:");
   fgets(buffer, 10, stdin);
   point.x = (int)buffer;
   printf("Y Coordinate:");
   fgets(buffer, 10, stdin);
   point.y = (int)buffer;
   append(points, point);    
}

static void append(struct Point points[], struct Point point){
   int i;
   for (i = 0; i < 10; i++){
      if (points[i] == NULL){
         points[i] = point;
}    

编译后,我收到以下错误,我不太清楚为什么:

points.c:115:10: error: invalid storage class for function 'append'
points.c: In function 'append':
points.c:127:17: error: invalid operands to binary == (have 'struct Point' and 'void *')

另外,我可以像我试图那样轻松地“折腾”points[]阵列吗?

感谢您的任何评论!

1 个答案:

答案 0 :(得分:2)

第一个错误很可能因为您在调用之前尚未声明函数append。在调用之前添加函数原型。换句话说,在pointReader定义之前,添加以下行:

static void append(struct Point points[], struct Point point);

第二个错误是因为points数组中的值是而不是指针,因此不能像指针那样对待(比如将它与NULL进行比较)。您必须使用另一种方法来检查是否使用了数组中的条目。例如,使用x的{​​{1}}和y值或类似的值。


您还有另一个问题,那就是您不能通过强制转换将字符串转换为整数。你必须使用诸如strtol之类的函数:

-1