1

このコードのエラーは何ですか??!!

ヒント :sp_to_dash()次のプログラムの関数は、文字列引数の各スペースにダッシュを出力します。つまり、文字列"this is a test"は として出力され"this-is-a-test"ます。

#include <stdio.h>

void sp_to_dash( char *str);

int main(void)
{    
  sp_to_dash("this is a test");

  return 0;    
}

void sp_to_dash( char *str)    
{    
  while(*str) {    
  if(*str==' ' ) *str = '-';    
  printf("%c", *str);    
  str++;    
  }    
}
4

3 に答える 3

7

文字列リテラルは変更できません。このように変更します。

int main(void)
{ 
  char str[] = "this is a test";
  sp_to_dash(str);

  return 0;    
}
于 2013-08-10T13:14:25.543 に答える
3

Yu Haoの答えはとても良いですが、私はそれを修正する別の方法があります:

void sp_to_dash( char *str)    
{    
  while(*str) {    
  if(*str==' ' ) *str = '-';    
  printf("%c", *str);    
  str++;    
  }    
}

==>

void sp_to_dash(const char *str)    
{    
  while(*str) {    
  if(*str !=' ' )     
      printf("%c", *str);
  else
      printf("-");    
  str++;    
  }    
}

また、文字列を変更する必要がない間、正しい文字列を出力します。

于 2013-08-10T13:53:27.443 に答える
1

const char*関数にa を渡しています"this is a test"配列は文字列リテラルであり、コンパイラで確認すると、実行可能ファイル ( rodata )の特別な読み取り専用セクションに配置されます。実際、 constとして宣言された残りの変数も同様です。const char*トリックは、文字列が単なる a ではなくa であることを知っていることchar*です。

于 2013-08-10T13:25:18.873 に答える