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++文字列の最後の文字 ( ?)へのポインターを返しています。
1 バイトの割り当てが少なすぎます (する必要がありますstrlen(...) + 1)。

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

/* .. */
stripped++;

/* .. */
return stripped;

original_stripped = strippedbefore starting to changeのようにコピーを保持し、コピー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 に答える