char getString(char *str, int length, char field[20])
{
printf(" %s: ", field);
fflush(stdin);
fgets(str, length, stdin);
str[strlen(str) - 1] = '\0';
fflush(stdin);
return *str;
}
为什么在这种情况下不能使用strcpy
strcpy(newContact->fieldsValue[i], getString(newContact->fieldsValue[i], 30, listFieldsName[i]));
我想获取fieldName值
struct newContact = {
char *fieldsName[30],
char *fieldsValue[30],
struct newContact* next;
}
char *listFieldsName = {"a", "b", "c"};
1条答案
按热度按时间xnifntxz1#
未定义的行为:
刷新标准输入会调用未定义的行为。
来自C11:
如果stream指向其中没有输入最近的操作的输出流或更新流,则fflush函数使得要递送到主机环境的该流的任何未写数据被写入文件;否则,该行为是未定义的。
strcpy
的参数无效:来自C11:
strcpy函数将s2指向的字符串(包括终止空字符)复制到s1指向的数组中。如果复制发生在重叠的对象之间,则行为未定义。
函数
strcpy
接受源字符串和目标字符串,其中字符串是以空值结尾的字节数组。getstring
返回的是char
,而不是char *
,您传递的是char
而不是char *
到strcpy
。