1

コードが argv[] 文字列を受け入れないのはなぜですか? 修正するにはどうすればよいですか? 小文字と大文字の両方を入力して、配列に小文字のみを入力できるようにしたいと考えています。助けてくれてありがとう。

#include <stdio.h>
#include <stdlib.h>  
#include <ctype.h>

int main(int argc, char argv[])
{

  char word[30]= atoi(argv[1]);  // here is the input
  for (int i = 0; word[i]; i++)
    word[i] = tolower(word[i]);

  printf("Here is the new word: %s\n", word);
  return 0;
}
4

2 に答える 2

3

コードにいくつかの問題があります。

  • KingsIndianが既に述べたように、メイン関数の argvパラメータの前に * がありません。この'Main Function' wiki ページには、これに関する詳細が含まれています。

  • atoi文字列の数値を整数に変換するために使用されます。これはあなたが望むものではないと思います。argv[x]は既に文字列 (char *) であるため、直接使用できます。

  • 直接使用する場合は、内容を変更することはできません (許可されていないと思います)。したがって、コピーを作成する必要があります。strlen()の長さを調べargv[1]malloc()バッファを作成しstrcpy()てコピーするために使用します。


#include <stdio.h>
#include <stdlib.h>  
#include <ctype.h>
#include <string.h>

int main(int argc, char *argv[])
{
  char *word = malloc(strlen(argv[1]) + 1);
  strcpy(word, argv[1]);
  int i;
  for (i = 0; word[i]; i++)
    word[i] = tolower(word[i]);

  printf("Here is the new word: %s\n", word);
  return 0;
}

その他の注意事項:

  • argc!を使用して指定されたコマンド ライン パラメーターの量を確認すると、より適切 (より堅牢) になります。

  • 理論的malloc()には 0 を返すことができます。これは、メモリの要求が失敗したことを示します。したがって、これを確認する必要があります。

  • 小文字の世界だけを印刷したい場合は、最初に変換してから印刷する必要はありません。代わりに、変換された各文字を直接印刷できます。

于 2012-11-11T02:37:11.590 に答える
3
int main(int argc, char argv[])

次のようにする必要があります。

int main(int argc, char *argv[])

さらに、障害をより適切に処理できるよりもstrtol優れたオプションです。atoistrtol

于 2012-11-11T02:22:09.813 に答える