我有3個問題關於下面的函數。我在代碼中將它們標記爲註釋。什麼是複製一個指針,然後返回第一個
爲什麼我們通過
dest
(malloc
版內存)指出焦炭項目複製到dPtr
,然後在年底return dest
(處理輸入字符串後)。在dest
上操作會不會更簡單?該功能基本上只在內部有破折號的情況下翻轉單詞。標記的命令
*subword = '\0';
將NUL
字符放在之前遞增的地方(在strncpy
) -subword+1
或subword
?該函數是否容易出現某些緩衝區溢出或其他不良行爲?現在它不會給我任何錯誤,但我想我只是不知道如何調試它。
len
是strlen(word)
char* function(char* word, int len)
{
char* subword = NULL;
char* dest;
char* dPtr;
size_t n;
dest = malloc(len+1);
if (dest == NULL) return NULL;
dPtr = dest; /* [1] */
while((subword = strrchr(word, '-'))!= NULL) {
n = len - (subword-word) - (dPtr-dest);
if (n-1 > 0)
strncpy(dPtr, subword+1, n-1);
*subword = '\0'; /* [2] */
dPtr += n-1;
*dPtr = '-';
dPtr++;
}
strncpy(dPtr, word, len - (dPtr-dest));
dest[len] = '\0';
return dest; /* [1] */
}
關於[3] - 我應該首先'strdup'呢? –
@PeterKowalski實際上,我認爲你不需要:在仔細使用'strncat'或'strncpy'的'n'值時,函數在指定時會_stop_,所以你不必擔心null子串的終止。 – pb2q