我对以下功能有 3 个问题。我将它们标记为代码中的注释。
为什么我们将
dest
(malloc
ed memory)指向的char项复制到dPtr
,然后在最后(处理输入字符串后)return dest
。操作起来岂不是更简单dest
。这个函数基本上只有在里面有破折号的情况下才会反转单词。标记的命令是否
*subword = '\0';
将NUL
字符放置在先前增加的位置(instrncpy
) -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] */
}