使用 strcpy() 函数的正确方法?
Correct way to use strcpy() function?
strcpy()函数的正确使用方法是什么?我用两种方法完成了,两次程序都运行良好,所以我想知道 "more correct" 使用它的方法是什么。我想将字符串 s2 复制到 s1。
这个:
s1=strcpy(s1, s2);
或者只写:
strcpy(s1, s2);
函数签名是:
char* strcpy(char* destination, const char* source);
return 值为 destination
。如果你想使用那个值你可以,否则你可以忽略它。
这是针对您想要 return strcpy(x,y)
而不必事后显式 return x
的情况。
请注意,像 strcpy
这样的函数本质上是危险的,因为它们没有正确检查缓冲区长度。您可能应该使用 strcpy_s
或类似的具有显式长度字段的东西,这样您就不会产生缓冲区溢出错误。
第二种方式正确。 strcpy()
的 return 值始终与其第一个参数相同,因此您的第一个版本等效于:
strcpy(s1, s2);
s1 = s1;
第二个作业显然毫无意义。如果 s1
是数组而不是指针变量,它将无效,因为您不能分配给数组。
strcpy()函数的正确使用方法是什么?我用两种方法完成了,两次程序都运行良好,所以我想知道 "more correct" 使用它的方法是什么。我想将字符串 s2 复制到 s1。
这个:
s1=strcpy(s1, s2);
或者只写:
strcpy(s1, s2);
函数签名是:
char* strcpy(char* destination, const char* source);
return 值为 destination
。如果你想使用那个值你可以,否则你可以忽略它。
这是针对您想要 return strcpy(x,y)
而不必事后显式 return x
的情况。
请注意,像 strcpy
这样的函数本质上是危险的,因为它们没有正确检查缓冲区长度。您可能应该使用 strcpy_s
或类似的具有显式长度字段的东西,这样您就不会产生缓冲区溢出错误。
第二种方式正确。 strcpy()
的 return 值始终与其第一个参数相同,因此您的第一个版本等效于:
strcpy(s1, s2);
s1 = s1;
第二个作业显然毫无意义。如果 s1
是数组而不是指针变量,它将无效,因为您不能分配给数组。