当我运行此代码时出现此错误: [错误]下标值既不是数组也不是指针也不是矢量
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*Defined a data type named User with typedef*/
typedef struct User{
char firstName[50];
char lastName[50];
int phonenumber;
}user;
int main(int argc, char *argv[]) {
user users[2];/*users defined "user" type*/
strcpy(users[0].firstName,"furkan");
strcpy(users[1].lastName,"xxxx");
users[0].phonenumber = 1;
users[1].phonenumber = 2 ;
print_users(users);
return 0;
}
/*Function for printing user type users values*/
void print_users(user usr)
{
int j=0;
for(j=0;j<10;j++)
{
printf("%-10s%-20s%7d\n",usr[j].firstName,usr[j].lastName,usr[j].phonenumber);
}
}
我可以在没有typedef的情况下创建此函数,但我想知道是否有办法实现这一目标
答案 0 :(得分:1)
void print_users(user *usr)
这应该是你的函数接收的参数,因为在你的函数内部你可以使用usr [j],这意味着usr需要是一个指针,而不是一个结构本身。
啊,只是说,你从0到9(10个职位),你唯一分配的2个职位。
答案 1 :(得分:1)
功能参数
void print_users(user usr);
^^^^^^^
是一个标量对象。您可能不会为标量对象应用下标运算符。
如果你想要函数处理数组,那么你应该至少声明函数
void print_users(user usr[]);
^^^^^^^^^^
考虑到不清楚为什么该函数使用幻数10。
for(j=0;j<10;j++)
^^^^^
同时在main中声明了一个只包含两个元素的数组
user users[2];
因此,正确声明像
这样的函数void print_users(user usr[], size_t n );
并在循环中使用变量n
for(j=0;j < n;j++)
^^^^^
相应地,该函数可以像
一样调用print_users( users, 2 );