我很困惑,为什么会发生这种情况,尽管我以前使用过这样的语句。我将一个字符串复制到其他字符串中,即使在调用strtok
之前,我的原始字符串也会被损坏。这是相关的代码片段,在此之后我使用strtok
。但在此之前,我看到reference
已损坏。C:malloc和strcpy之间的字符串被破坏
int j, sizeref;
char *str1, *token;
printf("%s :", reference);
sizeref = strlen(reference);
printf("%d\n", sizeref);
track = malloc(sizeref);
printf("%s :", reference);
strcpy(track, reference);
printf("%d\n", strlen(track));
这是以下输出。第一行打印整个reference
,正确尺寸为234.之后,我看到只有106个字符被复制,并且原始字符串reference
也被截断为106个字符。 track
被声明为char *
+918956549122,9527529747,09847778399,08596774833,9867859469,+919999866778,6985888696,5968939898,6959869856,9898495895,6986596865,09847765399,88596774833,9967859469,+917899866778,6985889696,9527567747,09848778399,08596756733,9867999469 :234
+918956549122,9527529747,09847778399,08596774833,9867859469,+919999866778,6985888696,5968939898,69598698 :106
更多信息:参考越来越中的50字节的块中增量积聚。一旦完全建成,那么只能如上所述使用。 char * reference
是全球性的,并且正在主要内部建起来。上述代码是一个单独的函数
realloc(reference,strlen(reference) + CHUNK);
'track = malloc(sizeref + 1)'...您不会为NUL终止符分配空间。除此之外,你的程序还有另一个UB。 'strlen()'返回'size_t'和** not **'int',所以你必须使用'%zu'而不是'%d'来打印。 – 2013-11-01 06:47:05
@ H2CO3你有时候可以节省我这么多该死的打字。我需要在某一天偿还那个恩惠= P – WhozCraig
@WhozCraig:D够公平的。 – 2013-11-01 06:49:44