私はC言語ではあまりよくありませんが、大文字と小文字を区別しないファイルを読み込むGLUTアプリケーションを設計しています。簡単にするために、私は文字列をすべて小文字に変換したいと思っています。私は、参照によって渡された変数を変更しているmakeLower関数を作成しました。小文字の問題に未知の長さ文字列をカバーする
whileループの最初の繰り返しの一部を取得してEXEがクラッシュするようなmakeLowメソッドにWhileループがあります。すべてのヒントは素晴らしいだろう、ありがとう!
出力:
C:\Users\Mark\Documents\Visual Studio 2010\Projects\Project 1\Debug>"Project 1.e
xe" ez.txt
Line is #draw a diamond ring
Character is #
その後エラー "プロジェクト1.EXEは動作を停止しました"
コード:
void makeLower(char *input[]){
int i = 0;
printf("Line is %s\n", *input);
while(input[i] != "\0"){
printf("Character is %c\n", *input[i]);
if(*input[i] >= 'A' && *input[i] <= 'Z'){
*input[i] = tolower(*input[i]);
}
i++;
}
}
int main(int argc, char *argv[]) {
FILE *file = fopen(argv[1], "r");
char linebyline [50], *lineStr = linebyline;
char test;
glutInit(&argc, argv);
while(!feof(file) && file != NULL){
fgets(lineStr , 100, file);
makeLower(&lineStr);
printf("%s",lineStr);
//directFile();
}
fclose(file);
glutMainLoop();
}
デバッガで実行してみましたか?それ以外にも、私はあなたにヒントを与えることができます:例えば、 '* input [i]'のようなポインタ間接演算子( '*')が何であるか知っていますか?私はそれらをすべて見てみることをお勧めします。 :) –
変数を尊重しないのですか?それは参照によって関数に渡されて以来?私はCのtbhとあまりよくはありません。 – meriley
文字列( 'char'へのポインタ)があれば' string [i] 'を使って1文字を得ることができます。ここで' i'は0から文字列の長さ-1を引いた数字です。文字列+ i) '。後者は、実際にはコンパイラが 'string [i]'を ''に変換するものです。 –