读书人

bug:去掉字符串中的空格

发布时间: 2012-04-11 17:42:33 作者: rapoo

求助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;} 

读书人网 >C语言

热点推荐