在c中从scanf向函数传递字符数组
我在c代码中有以下函数在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_
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 对于(int i=97;i您可以使用char
的动态数组将其传递到函数中。
这是密码
#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;
}
请记住,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);