gpt4 book ai didi

c - 将 char * 传递给函数返回与传递 char [] 不同的结果?

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:13 24 4
gpt4 key购买 nike

我正在用 C 编写一个函数来从字符串 (*s) 中获取下一个单词并将其复制到缓冲区 (*w) 中。它返回单词的第一个字符。

当输入字符串是字符指针 (char *text) 时它工作正常,但是当我将类型更改为字符数组 (char [MAXTEXT]) 时程序崩溃。

这让我感到困惑,因为我认为编译器无论如何都会将 char 数组“衰减”为 char 指针。在我看来,输入是 char 指针还是 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];
}

关于c - 将 char * 传递给函数返回与传递 char [] 不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44320508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com