r*********i 发帖数: 67 | 1 Run-Time Check Failure #2 - Stack around the variable 'tmpStr' was
corrupted.
我的代码如下:
#include
#include
#include
void compress(char *str1, char *str2) {
int flag = 0;
int len1 = strlen(str1);
int ii, jj;
int charCount[128] = {0};
int cnt = 0, cntOfDups = 0;
int newLen;
char tmpStr[1] = "";
// figure out new length
for (ii=0; ii
if (str1[ii] != str1[ii+1]) {
cnt += 2;
cntOfDups = 1;
}
else {
cntOfDups++;
}
}
newLen = cnt+2;
str2[newLen] = ' | r*********i 发帖数: 67 | 2 接着贴
newLen = cnt+2;
str2[newLen] = '\0';
if (newLen > len1) {
strcpy(str2, str1);
return;
}
cntOfDups = 1;
for (ii = len1-1; ii > 0; --ii) {
if (str1[ii] != str1[ii-1]) {
itoa(cntOfDups, tmpStr, 10);
str2[newLen-1] = tmpStr[0];
str2[newLen-2] = str1[ii];
newLen -= 2;
cntOfDups = 1;
}
else {
cntOfDups++;
}
}
itoa(cntOfDups, tmpStr, 10);
str2[newLen-1] = tmpStr[0];
str2[newLen-2] = str1[ii];
}
int main(){
char str1[100], str2[100];
strcpy(str1, "abcccccccccdd");
printf("str1 %s before \n", str1);
compress(str1, str2);
printf("str2 %s after \n", str2);
return 0;
} | p***o 发帖数: 1252 | 3 看起来像leetcode 443,网上到处都是讨论。
【在 r*********i 的大作中提到】 : 接着贴 : newLen = cnt+2; : str2[newLen] = '\0'; : if (newLen > len1) { : strcpy(str2, str1); : return; : } : : cntOfDups = 1; : for (ii = len1-1; ii > 0; --ii) {
| n******t 发帖数: 4406 | 4 tmpstr長度只夠放'\0'.所以你啥也幹不了。
【在 r*********i 的大作中提到】 : Run-Time Check Failure #2 - Stack around the variable 'tmpStr' was : corrupted. : 我的代码如下: : #include : #include : #include : void compress(char *str1, char *str2) { : int flag = 0; : int len1 = strlen(str1); : int ii, jj;
| r*********i 发帖数: 67 | 5 谢谢netghost 回复。居然把字符串尺寸定义时候应该包括null给忘了。 |
|