私は文字列(* s)から次の単語を取得し、それをバッファ(* w)にコピーするためにC言語で関数を書いています。単語の最初の文字を返します。char *を関数に渡すと、char []を渡す以外の結果が返されますか?
入力文字列がcharポインタ(char * text)のときはうまく動作しますが、タイプをchar配列(char [MAXTEXT])に変更するとプログラムがクラッシュします。
私はコンパイラの「崩壊した」char配列をcharポインタにとにかく思ったので、これは私を混乱させます。私の信念としては、入力がcharポインタかchar配列かどうかで違いはありませんか?
(宣言はchar text[MAXTEXT] = "This should return the first word";
に変化したときにクラッシュライン10 char *text = "This should return the first word";
、である)
#include <stdio.h>
#include <ctype.h>
#define MAXTEXT 1000
int getword(char *inp, char *out, int lim);
void main()
{
char *text = "This should return the first word";
char *word;
int i, c;
printf("%c", getword(text, word, MAXTEXT));
printf("%s", word);
}
int getword(char *s, char *w, int lim)
{
static int bufp = 0;
char c;
char *word = w;
while (isspace(c = s[bufp++]));
if (c != EOF)
*w++ = c;
else if (!isalpha(c))
{
*w = '\0';
return c;
};
for (; --lim > 0; bufp++)
if (isalpha(c = s[bufp]) || c == '\'')
*w++ = s[bufp];
else
break;
*w = '\0';
return word[0];
}
は、*それが指しん* –
をどこにもまだ?宣言を設定すると、charを指すポインタの初期化のためのメモリを単に確保するだけではないのですか?初期化はgetword()関数の内部で行われます。 –
また、明示的に 'EOF'を' text'バッファに入れない限り、その値を持つ文字は決して含まれません。そして、もしあなたがそうするなら、あなたは 'EOF'がcharではなく' int' *であり、 '(char)EOF!= EOF'というチャンスがあります(' char'が'unsigned'かどうかはコンパイラによって異なります)。標準I/O文字関数が 'int'を返し、' char'を返さない理由があります。 –