首先,我寫了一個簡單的程序。strncat上的分割錯誤()
1 #include <string.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4
5 int main()
6 {
7 char *buf = (char*)malloc(sizeof(char)*2000);
8 char tmp[256];
9 strcpy (tmp, "test");
10 printf ("tmp: %s\n", tmp);
11 strncat (buf, tmp, strlen(tmp));
12 printf ("buf: %s\n", buf);
13 }
預期的結果是:
tmp: test
buf: test
但之後我在大項目相結合的代碼。 (使用大量堆段)
153 char *inbuf = (char*)malloc(sizeof(char)*2000);
154 char *outbuf = (char*)malloc(sizeof(char)*2000);
155 char *oldinbuf = (char*)malloc(sizeof(char)*2000);
156 char *errbuf = (char*)malloc(sizeof(char)*2000);
157 memset (inbuf, '\0', strlen(inbuf));
158 memset (oldinbuf, '\0', strlen(oldinbuf));
159 memset (errbuf, '\0', strlen(oldinbuf));
然後在行:11,我得到錯誤信息Segmentation fault (core dumped)
是否有任何可能性,strncat
導致段故障?
因爲我需要連接在'buf'和'tmp'新的內容舊的內容,和我查了老inbuf內容謹慎(在malloc大小內)。 – 2014-11-22 10:25:55
在'strncat()'之前我們沒有看到'buf'被任何值初始化,這就是爲什麼你會看到這個問題。如果buf在'strncat'之前有一些值,那麼這將工作正常。因此,如果是這種情況,你可以使用'strncpy()' – Gopi 2014-11-22 10:31:04
而不是'malloc + memset',你可以使用'calloc' [這可能會更快](http://stackoverflow.com/questions/2688466/why- mallocmemset-是-慢於釋放calloc /)。你在第157-159行的memset設置[錯誤的字節數](http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointing-to-an-array) 。此外[請參閱此處](http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc)malloc的現代用法。 – 2014-11-22 10:33:25