什么是处理 strcpy 的 return 类型的正确方法
Whats the proper way to handle strcpy's return type
我创建了一个程序,但在某些时候变成了一个有问题的程序,我找不到一个好的方法来处理如下程序中的情况:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int get_user_name( char *const dest, char *const src );
char *foo( char *variable ); /// foo() returns NULL
int main( void )
{
char arr[256] = { 0 };
char buffer[ 256 ] = { 0 };
char *const ptr = foo( arr ); /// foo() returned NULL here
if ( get_user_name( buffer, ptr ) == 0 ) /// get_user_name, should here return 0
{
printf("NULL returned from get_user_name()\n" );
exit( EXIT_FAILURE );
}else
{
printf( "Everithing is OK" );
}
}
int get_user_name( char *const dest, char *const src )
{
char *ret = strcpy( dest, src ); /// Here Segfault happens
/// There is no return here because of above Segfault
if ( ret == NULL )
{
return 0;
}else
{
return 1;
}
}
char *foo( char *variable )
{
if ( strlen( variable) < 1 )
{
return NULL; /// Here will return NULL because there is no Length
}
/// Some code here ...
return variable;
}
这里使用一个演示函数 returns NULL
来解释我的问题。
我想在将 src
传递到 strcpy
之前检查它,但我真的不明白为什么 strcpy
returns dest
不检查 src
是否是NULL
与否。
为什么会发生这种情况,因为我看到 strcpy
手册只说了 dest
的 return,如果失败则什么也没有:
RETURN VALUE
The strcpy() and strncpy() functions return a pointer to the destination string dest.
您通过首先检查参数不为空来处理这种情况。例如:
int get_user_name( char *dest, char *const src )
{
char *ret;
if (dest==0 || src==0) return 0;
strcpy( dest, src );
return 1;
}
另请注意,dest
不能是 const
,因为它被写入。
我创建了一个程序,但在某些时候变成了一个有问题的程序,我找不到一个好的方法来处理如下程序中的情况:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int get_user_name( char *const dest, char *const src );
char *foo( char *variable ); /// foo() returns NULL
int main( void )
{
char arr[256] = { 0 };
char buffer[ 256 ] = { 0 };
char *const ptr = foo( arr ); /// foo() returned NULL here
if ( get_user_name( buffer, ptr ) == 0 ) /// get_user_name, should here return 0
{
printf("NULL returned from get_user_name()\n" );
exit( EXIT_FAILURE );
}else
{
printf( "Everithing is OK" );
}
}
int get_user_name( char *const dest, char *const src )
{
char *ret = strcpy( dest, src ); /// Here Segfault happens
/// There is no return here because of above Segfault
if ( ret == NULL )
{
return 0;
}else
{
return 1;
}
}
char *foo( char *variable )
{
if ( strlen( variable) < 1 )
{
return NULL; /// Here will return NULL because there is no Length
}
/// Some code here ...
return variable;
}
这里使用一个演示函数 returns NULL
来解释我的问题。
我想在将 src
传递到 strcpy
之前检查它,但我真的不明白为什么 strcpy
returns dest
不检查 src
是否是NULL
与否。
为什么会发生这种情况,因为我看到 strcpy
手册只说了 dest
的 return,如果失败则什么也没有:
RETURN VALUE
The strcpy() and strncpy() functions return a pointer to the destination string dest.
您通过首先检查参数不为空来处理这种情况。例如:
int get_user_name( char *dest, char *const src )
{
char *ret;
if (dest==0 || src==0) return 0;
strcpy( dest, src );
return 1;
}
另请注意,dest
不能是 const
,因为它被写入。