2
char* clean_string (char *input_string){
  /*Ensure that input string isn't null and only do heavy lifting if it's not null*/
  if (input_string){
    char *stripped;
    stripped = (char*)malloc(strlen(input_string)*sizeof(char));
    while (*input_string != '\0'){
      if isalpha(*input_string){
        *stripped = toupper(*input_string);
    input_string++;
    stripped++;
      } else {
        input_string++;
    }
  }
/*       *stripped++ += '\0';*/
   return stripped;
  }
 /*default return val*/  
return NULL;
}

谁能告诉我我哪里出了问题?尝试进行测试运行,当我尝试调用它时它不输出任何内容。

4

4 回答 4

7

您正在返回指向字符串 ( stripped++?) 中最后一个字符的指针。
您分配的一个字节太少(应该是strlen(...) + 1)。

stripped = (char*)malloc(strlen(input_string)*sizeof(char)); /* Wrong. */
stripped = (char*)malloc(strlen(input_string) + 1);

/* .. */
stripped++;

/* .. */
return stripped;

尝试保留一份副本,就像original_stripped = stripped在开始更改之前一样stripped,并返回复制的值(而不是增加的值)。

于 2011-09-15T07:04:44.983 回答
2

问题在于调用stripped++. 你正在修改你得到的指针malloc。制作一个额外的指针char *result_char = stripped;并将其用于对结果字符串的迭代。

于 2011-09-15T07:06:19.977 回答
2

问题在于您在返回之前增加了剥离的变量。尝试:

char *stripped; 
char *result;
stripped = (char*)malloc(strlen(input_string)*sizeof(char)); 
result = stripped;
...
return result; 
于 2011-09-15T07:08:31.570 回答
0

怎么样:

    char* clean_string (char *input_string)
    {
      /*Ensure that input string isn't null and only do heavy lifting if it's not null*/
        if (input_string)
        {
            char *stripped;
            int i;

            stripped = (char*)malloc(strlen(input_string)*sizeof(char) + 1);

            for(i=0; i < strlen(input_string); i++)
                stripped[i] = (isalpha(input_string[i]) ? toupper(input_string[i]) : input_string[i]);

            return stripped;
        }
     /*default return val*/  


return NULL;
}
于 2011-09-15T07:38:18.173 回答