输入lakenum
是1-5的整数。给定该整数,该函数应该指定一个名称并将字符串数组返回给main函数,但是我得到了指针错误:
错误:返回从指针生成整数而没有强制转换 error:函数返回局部变量的地址
我使用printf ("%s", lakenamer(lakenum));
int lakenamer(lakenum) {
char lname[20] = "0";
if (lakenum == 1) {
strncpy(lname, "Ontario", 20);
} else if (lakenum == 2) {
strncpy(lname, "Erie", 20);
} else if (lakenum == 3) {
strncpy(lname, "Huron", 20);
} else if (lakenum == 4) {
strncpy(lname, "Muskoka", 20);
} else if (lakenum == 5) {
strncpy(lname, "Simcoe", 20);
}
printf("%s",lname);
return (lname);
}
答案 0 :(得分:2)
如果要在函数外部使用它,则需要为函数内的字符串动态分配内存。
char* lakenamer( int lakenum )
{
char* lname = ( char* )malloc( 20 );
if ( lakenum == 1 )
{
strncpy( lname, "Ontario", 20 );
}
else if ( lakenum == 2 )
{
strncpy( lname, "Erie", 20 );
}
else if ( lakenum == 3 )
{
strncpy( lname, "Huron", 20 );
}
else if ( lakenum == 4 )
{
strncpy( lname, "Muskoka", 20 );
}
else if ( lakenum == 5 )
{
strncpy( lname, "Simcoe", 20 );
}
printf( "%s", lname );
return ( lname );
}
int main()
{
int lakenum = 1;
char* s = lakenamer( lakenum );
printf( "%s", s );
/*
.
.Do other stuff with s
.
*/
free( s ); // Very important !!
}
答案 1 :(得分:0)
您应该使用char *lakenamer()
并从中返回字符串(或strdup(your_string)
)。
顺便说一句,您使用的是printf ("%s", lakenamer(lakenum));
,因此您需要返回值为char *
,但您需要返回int
。
答案 2 :(得分:0)
此外,您将lname声明为函数中的局部变量,但是将指针返回给调用函数。这样做并不好,因为一旦你返回,你的内存地址就可以随时被写下来。
您可以让呼叫者分配内存,并将其地址传递给您,即
char[20] lname;
lakenamer(lakenum, lname);
然后在你的函数中你可以将结果strcpy到lname。然后让lakenamer返回void,如果你想返回成功或错误状态代码,则返回int。
答案 3 :(得分:-1)
错误:return从没有强制转换的指针生成整数
Ans:您收到此错误是因为您正在返回地址并使用int进行收集而不进行强制转换。
错误:函数返回局部变量的地址
Ans:由于您从返回Main()函数后不存在的函数返回局部变量地址,因此您收到错误。
请找到解决上述问题的以下代码。
#include<stdio.h>
#include<string.h>
void lakenamer(int, char *);
main(int argc, char *argv[])
{
char string[20]={0,};
lakenamer(atoi(argv[1]), string);
printf("\nIn Main fn:[%s]\n",string);
}
void lakenamer(int lakenum, char *str)
{
char lname[20] = "0";
//char lname[20] = {0,};
if (lakenum == 1) {
strncpy(lname, "Ontario", 20); //u can change lname to str
} else if (lakenum == 2) {
strncpy(lname, "Erie", 20);
} else if (lakenum == 3) {
strncpy(lname, "Huron", 20);
} else if (lakenum == 4) {
strncpy(lname, "Muskoka", 20);
} else if (lakenum == 5) {
strncpy(lname, "Simcoe", 20);
}
strcpy(str, lname);
printf("%s",lname);
//return (lname);//do not return any reference for local variable
}