1
我正在寫一個C函數來獲取字符串(* s)中的下一個單詞並將其複製到緩衝區(* w)中。它返回單詞的第一個字符。將char *傳遞給函數將返回不同於傳遞char []的結果?
當輸入字符串是一個char指針(char *文本)時它工作正常,但是當我將類型更改爲char數組(char [MAXTEXT])時,程序崩潰。
這讓我感到困惑,因爲我認爲無論如何編譯器會將字符數組「腐爛」到char指針中。我相信,輸入是字符指針還是字符數組不應該有所作爲?
(該聲明是在第10行char *text = "This should return the first word";
,當改爲char text[MAXTEXT] = "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];
}
當你聲明'word'爲指針,*哪裏它指向* –
無處了嗎??當我設置聲明時,我不是簡單地將內存用於初始化指向char的指針嗎?初始化發生在getword()函數內部。 –
此外,除非您明確地將'EOF'放入'text'緩衝區,否則它永遠不會包含具有該值的字符。如果你這樣做了,那麼你的'EOF'是一個*'int' *而不是一個char,並且有可能出現'(char)EOF!= EOF'(這取決於'char'是'unsigned'或不是,這是編譯器特有的)。標準I/O字符函數返回「int」而不是「char」是有原因的。 –