将char *传递给函数将返回不同于传递char []的结果?
问题描述:
我正在写一个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
,你还没有分配的任何内存。简单地分配内存将解决问题。 您的数组实现:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#define MAXTEXT 1000
char getword(char *inp, char *out, int lim);
int main()
{
char text[100],word[100];
// char *text = (char*)calloc(100,sizeof(char));
strcpy(text,"This should return the first word");
// char *word = (char*)calloc(100,sizeof(char));
int i, c;
printf("%c", getword(text, word, MAXTEXT));
// printf("%s", text);
return 0;
}
char 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”是有原因的。 –