检查字符指针是否具有字符串文字或不确定值

时间:2012-10-19 06:34:48

标签: c pointers

我对字符指针有疑问。

让我说我有:

char * x = malloc(len);

上面也没有返回NULL。

现在视情况而定:

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

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

strncpy(z,x,len);

任何指针都非常感激。

3 个答案:

答案 0 :(得分:2)

  

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

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

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

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

答案 1 :(得分: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) );

答案 2 :(得分: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是新手程序员最好的朋友。我想你应该在发布问题之前仔细研究它们并进行更多的研究。