0

我有一个关于字符指针的问题。

可以说我有:

char * x = malloc(len);

以上也不返回NULL。

现在根据条件:

if (<condition>)
  strncpy (x,y,len);

如何检查是否x包含任何字符串文字?因为那时我需要做:

strncpy(z,x,len);

任何指针都非常感谢。

4

3 回答 3

2

如何检查是否x包含任何字符串文字?

一般来说你不能。C 不保证此处使用的地址,因此您无法可靠地确定它们的来源。

但是您可能以错误的方式解决了这个问题:为什么x首先存在对起源的这种混淆?如果您只是想确保该值始终为malloc'd,只需始终malloc使用它,而不是将直接地址存储到字符串文字中。

(我觉得你的复制目标应该取决于值的来源通常很奇怪......)

于 2012-10-19T06:40:21.533 回答
0

猜猜这是一个家庭作业问题。无论如何,从 malloc 的手册页中,

malloc() allocates size bytes and returns a pointer to the allocated memory.  The memory is not cleared.  If size is 0, then malloc() returns either  NULL,  or  a  unique pointer value that can later be successfully passed to free().

在大多数情况下,当malloc失败时NULL返回,因此可以执行检查。

在你的问题中,我很舒服地假设这if x contains any string literals ?意味着你想检查是否strncpy成功。strncpy默认情况下返回一个指向目标的指针。因此,如果 malloc 返回 NULL,您肯定会陷入分段错误。

一种简单的方法是检查 x 的 strlen 是否等于 len。

strncpy 是一个很脏的函数,你的代码很容易出现很多错误!

man 是新手程序员最好的朋友。我想你应该在发布问题之前仔细阅读它们并做更多的研究。

于 2012-10-19T07:08:42.620 回答
0

我从你的问题中了解到,你想检查strncpy函数是否成功返回。答案是::

strncpy 不返回任何值来指示错误

所以,我认为您必须查看printf变​​量x是否包含任何字符串文字并且strncpy是否成功。

编辑:: 试试这个:

int isZero ;
char * x = malloc(len);
memset(x, 0, len) ;
if (<condition>)
    strncpy ( x, y, strlen(y) + 1);

isZero = strlen(x) ; /* if not 0, you know something is copied */
if( isZero != 0 )
    strncpy( z, x, (strlen(x) + 1) );
于 2012-10-19T07:05:03.900 回答