以下の機能について3点質問があります。コード内でコメントとしてマークしました。
dest
(malloc
ed memory) が指す char 項目を にコピー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] */
}