void add()
{
char name[50], surname[50], usern[50];
int id, birth, amount;
printf("Enter your name, surname and your year of birth:\n");
scanf("%s %s %d", &name, &surname, &birth);
printf("Enter your ID, username and your total amount:\n");
scanf("%d %s %d", &id, &usern, &amount);
const char *pass1=function(usern);
}
const char *function (char usern[50])
{
char temp;
int i=0;
int j;
j = strlen(usern) - 1;
while (i < j)
{
temp = usern[i];
usern[i] = usern[j];
usern[j] = temp;
i++;
j--;
}
return usern;
}
我致电&#39;添加&#39;来自&#39; main&#39;打印这些东西,然后我打电话给&#39;功能&#39;给我回复usern
字符串,但出了点问题。
我在编译时遇到错误:
[警告]初始化使得指针来自整数而没有强制转换 - &gt; const char * pass1 = function(usern);
[错误]冲突的类型 &#39;功能&#39; - &GT; const char * function(char usern [50])
答案 0 :(得分:5)
您看到的错误消息是由于在使用之前未声明函数function
而导致的。因此,编译器隐式声明了int
作为function
的默认类型的原型。但function
的实际返回类型与隐式int
类型冲突。所以你得到那些错误。
请注意,此隐式int规则不再有效,因为自C99以来它已被删除。这曾经是C89 / C90中的情况。
解决方案是为它提供原型。将其添加到源文件的顶部(如果有的话,将其包含在头文件中)。:
const char *function (char *);
答案 1 :(得分:0)
function
的返回有效的生命周期与传递给它的参数usern
的生命周期相同。
这是因为没有采用字符数组的深层复制。
如果您尝试从pass1
返回add
并使用它,则程序行为将未定义,因为usern
将超出范围。
在C中执行的正常操作是malloc
一个新字符串,返回指向它的指针。不要忘记在某个时候致电free
。