求助bug:去掉字符串中的空格
应该是我地址申请的问题,可是不太懂,请教:
char** pSubStr = NULL;
int num = 1;
void InputString(char* pInString)
{
const int n = sizeof(pInString);
char InStr[n];
strcpy(InStr,pInString);
char **pTem = NULL;
pTem = (char **)malloc(sizeof(char **));
pSubStr = pTem;
char *tok;
tok = strtok(InStr," ");
char *charArr = NULL ;
while(tok)
{
charArr = (char *)malloc(sizeof(char)*sizeof(tok));
strcpy(charArr,tok);
*pTem = charArr;
pTem++;
tok = strtok(0," ");
}
return;
}
原意:要去掉字符串中的空格。
编译运行都能通过,可是结果不对,单步运行,发现此函数执行结束的时候
The thread 0xCE8 has exited with code 1 (0x1).
[解决办法]
- C/C++ code
char** pSubStr = NULL;int num = 1;void InputString(char* pInString){const int n = strlen(pInString);char InStr[n+1];strcpy(InStr,pInString);char **pTem = NULL;pTem = (char **)malloc(sizeof(char **)*3);pSubStr = pTem;char *tok;tok = strtok(InStr," "); char *charArr = NULL ;while(tok){charArr = (char *)malloc(sizeof(char)*(strlen(tok)+1));strcpy(charArr,tok);*pTem = charArr;pTem++;tok = strtok(0," ");} return;}int main(){ char array[]="hello world fuck!"; InputString(array); cout<<pSubStr[0]<<endl<<pSubStr[1]<<endl<<pSubStr[2]; system("pause"); return 0;}
[解决办法]
- C/C++ code
int del_space(char *str){ char *cp = (char *)malloc(strlen(str)+1); char *tp = cp; char *ret = cp; strcpy(cp, str); do { *cp = *tp; if(' ' != *cp) ++cp; } while(*tp++); printf("result = %s...\n", ret); return 0;}
[解决办法]
const int n = sizeof(pInString);
char InStr[n];
改为 const int n =strlen(pInString);
char* InStr=new char[n];
[解决办法]
- C/C++ code
void InputString(char* str){ if (str == NULL) { printf("str is null.\n"); return; } while (*str != '\0') { if (*str == ' ') { printf("\n"); str++; continue; } printf("%c", *str); str++; } return;}
[解决办法]
- C/C++ code
char **split_by_space(char *str, int *split_count){ char **ret; char *ep = str + strlen(str); char *tp = str; int flag = 0; int i; *split_count = 0; while(tp < ep) { if(' ' == *tp) { *tp = '\0'; flag = 0; } else { if(!flag) { flag = 1; ++*split_count; } } ++tp; } tp = str; ret = (char **)malloc(*split_count); for(i=0; (i < *split_count) && (tp < ep); ++i) { while(!(*tp)) ++tp; *(ret + i) = (char *)malloc(strlen(tp) + 1); strcpy(*(ret + i), tp); while(*tp++) {} } return ret;}int test_split_by_space(void){ int sp_c; char inputstrs[128] = " 123 456 abc ef "; printf("input str = #%s#...\n", inputstrs); char **sp_str = split_by_space(inputstrs, &sp_c); int ii; for(ii=0; ii<sp_c; ++ii) { printf("split_str = %s...\n", *(sp_str+ii)); } return 0;}