仍然在教自己C.这一次,我正在尝试使用功能从键盘上读取文本:
int read_line(char my_string[]) {
int characters;
fgets(my_string, sizeof(my_string), stdin);
characters = strlen(my_string);
printf("characters =%d, my_string=%s. \n", characters , my_string);
}
int main(int argc, char *argv[]) {
char line[MAX];
read_line(line);
}
当我输入键盘时:
abcdefg
我在控制台上看到了这个:
characters =3, my_string=abc.
为什么C会以这种方式表现?通过方法读取字符串的正确方法是什么?
答案 0 :(得分:4)
你在你的fputs中使用sizeof。 C无法确定缓冲区的大小。 为了进一步说明,sizeof用于确定SIZEOF类型。
Example:
sizeof(short) = 2
sizeof(long) = 4
sizeof(char) = 1 (generally speaking, unless you compile for UNICODE)
原始代码不起作用的原因: 当你使用char []作为参数时,它会变成char *(指向char []的指针),这就是它的sizeof为4(指针通常是4个字节)的原因。如果在main()中使用sizeof(line),它将正确报告大小,因为编译器会在编译时更改代码以反映该信息。
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
int read_line(char my_string[]);
#define MAX 10
int _tmain(int argc, _TCHAR* argv[])
{
char line[MAX];
read_line(line);
return 0;
}
int read_line(char my_string[]) {
int characters;
fgets(my_string, MAX, stdin); <--FIX here
characters = strlen(my_string);
printf("characters =%d, my_string=%s. \n", characters , my_string);
return 0;
}
答案 1 :(得分:3)
WRONG:
int read_line(char my_string[]) {
int characters;
fgets(my_string, sizeof(my_string), stdin);
尝试&#34; printf(&#34; sizeof my_string [] =%d \ n&#34;,my_string);
我打赌你会得到&#34; 4&#34;。
问题出在哪里。
相反,请指定缓冲区大小,例如&#34; 80&#34 ;.或者无论你分配了什么缓冲区。
实施例
int read_line(char my_string[]) {
int characters;
fgets(my_string, MAX, stdin);
...