我希望这个程序返回一个数组,然后是一个来自main的变量来从函数中获取这个数组,并且可以在一部分代码中使用,该代码必须根据初始变量中的这些值来验证字符串.但是变量没有得到返回的数组.我看过一些帖子说你不能在C中返回数组,但我也看过其他帖子,这是可能的.
但是我想知道如何捕获这个返回值.
int getUsers()
{
char userVect[5][25];
char user[24];
int i = 0, j = 0, k;
FILE *usernames;
usernames = fopen("usernames.cfg", "r");
if (usernames == NULL){
perror("usernames - err");
return(-1);
}
while(fgets(user, sizeof(user), usernames) !=NULL){
strcpy(userVect[j], user);
j++;
}
fclose(usernames);
for(k=0; k<j; k++)
printf("Usernames are: %s\n", userVect[k]);
return userVect;
}
int main()
{
printf("\nWelcome to Sys v1.24. To start off, please insert your command. \n");
char *users;
users = getUsers();
printf("%c\n", users);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
1.你想要return一个字符串,你的函数的类型是int?
我看到你返回一个2-d数组,然后你的函数应该是类型char **-
char **getUser(void)
Run Code Online (Sandbox Code Playgroud)
2.userVect从函数返回局部变量().您无法在功能块外部访问它.
你应该在你的功能中做到这一点getUser-
char **userVect;
userVect=malloc(5*sizeof(char **)); //allocate memory
for(int i=0;i<5;i++)
userVect[i]=malloc(25*sizeof(char));
Run Code Online (Sandbox Code Playgroud)
并main做到这一点 -
char **user;
...
user=getUsers(); // call function
Run Code Online (Sandbox Code Playgroud)
3.并打印user在main-
for(int i=0;i<5;i++)
printf("%s\n", user[i]); //this is wrong in your code- printf("%c\n", users);
Run Code Online (Sandbox Code Playgroud)
然后free它在main那时结束 -
for(int i=0;i<5;i++)
free(user[i]);
free(user);
Run Code Online (Sandbox Code Playgroud)