使用变量将不同的字符串分配给 char 数组
Assign different strings to char array using a variable
输入lakenum
是一个1-5的整数。鉴于该整数,该函数应该为主函数分配一个名称和 return 字符串数组,但我得到了指针错误:
error: return makes integer from pointer without a cast
error: function returns address of local variable
我使用 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);
}
您应该使用 char *lakenamer()
和 return 您的字符串(或 strdup(your_string)
)。
顺便说一句,您正在使用 printf ("%s", lakenamer(lakenum));
,因此您需要 return 值为 char *
,但您正在 returning int
反而。
您还在函数中将 lname 声明为局部变量,但 return 将指向它的指针指向您的调用函数。这不好,因为一旦 return 该内存地址随时都可能被覆盖。
您可以改为让调用者分配内存,并将其地址传递给您,即
char[20] lname;
lakenamer(lakenum, lname);
然后在你的函数中你可以将结果strcpy到lname。然后让 lakenamer return void,如果你想 return 一个成功或错误状态代码,或者 int。
如果要在函数外使用,需要在函数内为字符串动态分配内存。
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 !!
}
错误:return 从指针生成整数而不进行转换
回答:您收到此错误是因为您正在 returning 地址并使用 int 进行收集而不进行强制转换。
错误:函数returns局部变量地址
Ans: 你得到上面的错误是因为你正在 returning 来自一个函数的局部变量地址,在 returning 到 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
}
输入lakenum
是一个1-5的整数。鉴于该整数,该函数应该为主函数分配一个名称和 return 字符串数组,但我得到了指针错误:
error: return makes integer from pointer without a cast
error: function returns address of local variable
我使用 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);
}
您应该使用 char *lakenamer()
和 return 您的字符串(或 strdup(your_string)
)。
顺便说一句,您正在使用 printf ("%s", lakenamer(lakenum));
,因此您需要 return 值为 char *
,但您正在 returning int
反而。
您还在函数中将 lname 声明为局部变量,但 return 将指向它的指针指向您的调用函数。这不好,因为一旦 return 该内存地址随时都可能被覆盖。
您可以改为让调用者分配内存,并将其地址传递给您,即
char[20] lname;
lakenamer(lakenum, lname);
然后在你的函数中你可以将结果strcpy到lname。然后让 lakenamer return void,如果你想 return 一个成功或错误状态代码,或者 int。
如果要在函数外使用,需要在函数内为字符串动态分配内存。
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 !!
}
错误:return 从指针生成整数而不进行转换
回答:您收到此错误是因为您正在 returning 地址并使用 int 进行收集而不进行强制转换。
错误:函数returns局部变量地址
Ans: 你得到上面的错误是因为你正在 returning 来自一个函数的局部变量地址,在 returning 到 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
}