C: 从函数中输入数据后无法访问 main 中的结构数据
C: Can not access the struct data in main after enter data from function
我是 C 程序的新手,我正在使用带有数组变量的结构来包含我的数据集。但是,在我向结构体输入一组数据并想要打印主函数中设置的数据后,它显示了一些未知的词或 empty.SO,我如何才能访问主函数或中的数据结构中的其他功能?我做错什么了吗?这是代码。有什么建议吗?提前致谢!
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include<ctype.h>
struct Team{
char tem[40];
char proj[40];
char leader[40];
char mem1[40];
char mem2[40];
char mem3[40];
};
void project_team(struct Team arr[5]){
char str[100];
printf("Enter> ");
scanf("%[^\n]s",str); //%[^\n]s can input string including space
sscanf( str, "%s %s %s %s %s %s",arr[0].tem,arr[0].proj,arr[0].leader,arr[0].mem1,arr[0].mem2,arr[0].mem3); //conver user input string to words and store in struct variable separately
printf("show: %s %s %s %s %s %s \n",arr[0].tem,arr[0].proj,arr[0].leader,arr[0].mem1,arr[0].mem2,arr[0].mem3);
}
int main(int argc, char *argv[]){
struct Team arr[5];
project_team( &arr[5] );
printf("showthis: %s %s %s %s %s %s \n",arr[0].tem,arr[0].proj,arr[0].leader,arr[0].mem1,arr[0].mem2,arr[0].mem3);
return 0;
}
我输入后:
Enter> TeamA ProjectA Amy Kelvin Fanny Jacky
它显示:
showthis: /usr/lib/dyld � �bx�� *
我希望展示的内容:
showthis: TeamA ProjectA Amy Kelvin Fanny Jacky
在这次通话中:
project_team( &arr[5] );
您正在传递数组最后一个元素之后的内存地址。
你需要写:
project_team( arr );
在scanf的这个调用中:
scanf("%[^\n]s",str);
从格式字符串中删除字符 's'
:
scanf(" %[^\n]",str);
这样写会更安全:
scanf(" %99[^\n]",str);
注意结构有6个字符数组,每个数组40个字符。很明显 6 * 40
比 100
大得多。
我是 C 程序的新手,我正在使用带有数组变量的结构来包含我的数据集。但是,在我向结构体输入一组数据并想要打印主函数中设置的数据后,它显示了一些未知的词或 empty.SO,我如何才能访问主函数或中的数据结构中的其他功能?我做错什么了吗?这是代码。有什么建议吗?提前致谢!
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include<ctype.h>
struct Team{
char tem[40];
char proj[40];
char leader[40];
char mem1[40];
char mem2[40];
char mem3[40];
};
void project_team(struct Team arr[5]){
char str[100];
printf("Enter> ");
scanf("%[^\n]s",str); //%[^\n]s can input string including space
sscanf( str, "%s %s %s %s %s %s",arr[0].tem,arr[0].proj,arr[0].leader,arr[0].mem1,arr[0].mem2,arr[0].mem3); //conver user input string to words and store in struct variable separately
printf("show: %s %s %s %s %s %s \n",arr[0].tem,arr[0].proj,arr[0].leader,arr[0].mem1,arr[0].mem2,arr[0].mem3);
}
int main(int argc, char *argv[]){
struct Team arr[5];
project_team( &arr[5] );
printf("showthis: %s %s %s %s %s %s \n",arr[0].tem,arr[0].proj,arr[0].leader,arr[0].mem1,arr[0].mem2,arr[0].mem3);
return 0;
}
我输入后:
Enter> TeamA ProjectA Amy Kelvin Fanny Jacky
它显示:
showthis: /usr/lib/dyld � �bx�� *
我希望展示的内容:
showthis: TeamA ProjectA Amy Kelvin Fanny Jacky
在这次通话中:
project_team( &arr[5] );
您正在传递数组最后一个元素之后的内存地址。
你需要写:
project_team( arr );
在scanf的这个调用中:
scanf("%[^\n]s",str);
从格式字符串中删除字符 's'
:
scanf(" %[^\n]",str);
这样写会更安全:
scanf(" %99[^\n]",str);
注意结构有6个字符数组,每个数组40个字符。很明显 6 * 40
比 100
大得多。