2012-10-19 72 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是一個相當髒的函數,你的代碼容易出現大量的錯誤!

男人是新手程序員最好的朋友。我想你應該通過他們,在發佈問題之前做更多的研究。

相關問題