2012-10-19 42 views
-1

我有一个关于字符指针的问题。检查字符指针是否有字符串字面值或不确定值

可以说我有:

char * x = malloc(len); 

以上不返回NULL也。

现在根据条件:

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

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

strncpy(z,x,len); 

任何指针极大赞赏。

+2

当你使用malloc,strncpy和纯char指针时,请停止使用C++标记 –

+0

你是什么意思?如果x包含任何字符串文字? – Andrey

+0

我想他的意思是,看看strncpy是否成功,字符串从y复制到x成功 – psteelk

回答

2

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

一般来说你不行。 C对这里使用的地址不作任何保证,所以你不能可靠地确定它们来自哪里。

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

(我觉得很奇怪一般,你复制的目标应该取决于价值的起源......)

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)); 
+0

正确,但打印该变量不是检查strncpy是否成功的好方法。相反,可以使用strlen来检查字符串的长度,看它是否等于len – psteelk

+0

是的,虽然你不能用len来检查strlen。 strlen将返回字符串的长度x = y中的字符串长度,它可以是!= len(大小为malloced)。你可以检查,如果(strlen(y)== strlen(x)){//做点什么} – Abhineet

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是一个相当脏的函数,你的代码容易出现大量的错误!

男人是新手程序员最好的朋友。我想你应该通过他们,在发布问题之前做更多的研究。

相关问题