传递“strcpy”的参数2,使指针从整数生成,而不进行类型转换[-Wint-conversion]

h7wcgrx3  于 2023-01-16  发布在  其他
关注(0)|答案(1)|浏览(200)
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"};
xnifntxz

xnifntxz1#

未定义的行为:

fflush(stdin);

刷新标准输入会调用未定义的行为。
来自C11:
如果stream指向其中没有输入最近的操作的输出流或更新流,则fflush函数使得要递送到主机环境的该流的任何未写数据被写入文件;否则,该行为是未定义的。

  • 一旦抽象状态机到达未定义状态,就不能进一步假设程序的执行是否继续。
  • Re:为什么我不能在这种情况下使用strcpy?*

strcpy的参数无效:

来自C11:
strcpy函数将s2指向的字符串(包括终止空字符)复制到s1指向的数组中。如果复制发生在重叠的对象之间,则行为未定义。
函数strcpy接受源字符串和目标字符串,其中字符串是以空值结尾的字节数组。

  • 答案:* getstring返回的是char,而不是char *,您传递的是char而不是char *strcpy

相关问题