在c中从scanf向函数传递字符数组

在c中从scanf向函数传递字符数组,c,scanf,C,Scanf,我在c代码中有以下函数 void analyze_text(char text[]) { ... for (int i = 0; i < text_length || text[i] != '\0'; i++) { ... } } 这很酷,可以实现目标,但我希望有一些用户输入,我不知道如何从中获取char[]。我尝试了以下两种方法,但似乎都不起作用: char text[4000]; scanf("%s",text); analyze_

我在c代码中有以下函数

void analyze_text(char text[]) {
    ...
    for (int i = 0; i < text_length || text[i] != '\0'; i++) {
    ...
    }
}
这很酷,可以实现目标,但我希望有一些用户输入,我不知道如何从中获取char[]。我尝试了以下两种方法,但似乎都不起作用:

char text[4000];
scanf("%s",text);
analyze_text(text);

字符文本[4000];
INTC;
整数计数=0;
c=getchar();
计数=0;
而((计数<4000)和&(c!=EOF)){
文本[计数]=c;
++计数;
c=getchar();
}
分析课文(课文);
我知道第一个应该返回指向char数组的指针,但第二个应该返回char数组本身,还是不返回

我已经有10年没有使用c/c++了。谁能给我一些提示吗

更新(整个功能):
void分析_文本(字符文本[]){
int可打印文本长度=0;
int text_length=strlen(文本);
int word_count=0;
int-statement_count=0;
句子中的int=0;
int in_word=0;
整数计数[ASCII_大小]={0};
对于(int i=0;i
请记住,dyanamc数组中的strlen不会给出输入数组的长度。

问题

char text[4000];
scanf("%s",text);
analyze_text(text);
就是说,
scanf
标识了空格分隔的块,所以您将只读取第一个

要从用户处最多读取一行,请尝试
fgets

char text[4000];
fgets(text, 4000, stdin);
analyze_text(text);

您可能需要检查
fgets的返回值以进行错误检测。

没有区别。
analyze\u text()无论您如何填写变量,
的工作原理都是一样的。您在哪里设置
文本长度
?您应该使用
&&
,而不是
|
。最后一个代码不为null终止数组。您不能返回数组。只能返回指针。那么,我如何获得类似charvar=“some text”
scanf(“%s”,text)的内容;
与现在过时的
get()
:缓冲区溢出有相同的问题。
scanf(“%3999s”,text);
会阻止这种情况发生。这对我也不起作用“使用代码-1073741819退出”
#include <stdio.h>
#include <stdlib.h> 
void analyze_text(char* text) {


    for (int i = 0; text[i] != '\0'; i++) {
        printf("%c\n",text[i] );
    }
}
int main() {

    char* text  = (char *)malloc(4000 * sizeof(char));
    scanf("%s", text);
    analyze_text(text);
    return 0;
}
a
b
h
i
s
h
e
k
char text[4000];
scanf("%s",text);
analyze_text(text);
char text[4000];
fgets(text, 4000, stdin);
analyze_text(text);