从C中的函数返回一个String

时间:2011-09-15 07:02:05

标签: c pointers c-strings

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 个答案:

答案 0 :(得分: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,并返回复制的值(不是递增的值)。

答案 1 :(得分:2)

问题在于调用stripped++。您正在修改malloc之前获得的指针。创建一个额外的指针char *result_char = stripped;并将其用于迭代结果字符串。

答案 2 :(得分:2)

问题是你在返回它之前增加你的剥离变量。 尝试:

char *stripped; 
char *result;
stripped = (char*)malloc(strlen(input_string)*sizeof(char)); 
result = stripped;
...
return result; 

答案 3 :(得分: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;
}