我有一個關於字符指針的問題。檢查字符指針是否有字符串字面值或不確定值
可以說我有:
char * x = malloc(len);
以上不返回NULL也。
現在根據條件:
if (<condition>)
strncpy (x,y,len);
我如何檢查是否x
包含任何字符串文字? 因爲然後我需要做:
strncpy(z,x,len);
任何指針極大讚賞。
我有一個關於字符指針的問題。檢查字符指針是否有字符串字面值或不確定值
可以說我有:
char * x = malloc(len);
以上不返回NULL也。
現在根據條件:
if (<condition>)
strncpy (x,y,len);
我如何檢查是否x
包含任何字符串文字? 因爲然後我需要做:
strncpy(z,x,len);
任何指針極大讚賞。
如何檢查
x
是否包含任何字符串文字?
一般來說你不行。 C對這裏使用的地址不作任何保證,所以你不能可靠地確定它們來自哪裏。
但是,你可能是在錯誤地解決問題:爲什麼這個關於x
起源的混淆首先存在?如果您只是想確保該值始終爲malloc
'd,則始終只需要malloc
而不是將直接地址存儲到字符串文字。
(我覺得很奇怪一般,你複製的目標應該取決於價值的起源......)
我從你的問題理解什麼是要檢查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));
想這是一個家庭作業的問題。不管怎麼說通過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是一個相當髒的函數,你的代碼容易出現大量的錯誤!
男人是新手程序員最好的朋友。我想你應該通過他們,在發佈問題之前做更多的研究。
當你使用malloc,strncpy和純char指針時,請停止使用C++標記 –
你是什麼意思?如果x包含任何字符串文字? – Andrey
我想他的意思是,看看strncpy是否成功,字符串從y複製到x成功 – psteelk