Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将空字符串分配给gets_C_String_Null_Eof - Fatal编程技术网

C 将空字符串分配给gets

C 将空字符串分配给gets,c,string,null,eof,C,String,Null,Eof,我想用C语言编写一个程序,填充字符串数组p[MAX][N] 我使用了这个,但我不知道在输入时输入的是空字符串 #include <stdio.h> #include <string.h> #define R 3 #define C 8 int main() { int i; char strings[R][C]; printf("***Table of Strings - Names***\n\n"); for(i=0;(i<R

我想用C语言编写一个程序,填充字符串数组p[MAX][N]

我使用了这个,但我不知道在输入时输入的是空字符串

#include <stdio.h>
#include <string.h>
#define R 3
#define C 8

int main()
{
    int i;
    char strings[R][C]; 
    printf("***Table of Strings - Names***\n\n");
    for(i=0;(i<R && gets(strings[i]));i++)
    ;           
    if(i==R)
    printf("\n**Table Full - input terminated \n");
    for(i=0;i<R;i++)
        puts(strings[i]);
    return 0;
}
#包括
#包括
#定义R3
#定义c8
int main()
{
int i;
字符串[R][C];
printf(“***字符串表-名称***\n\n”);

对于(i=0;(i首先,切勿使用
get()
。这本身就很危险,因为它不会对传递给它的内存执行任何边界检查。请改用
fgets()

for (i = 0; i < R && fgets(strings[i], C, stdin); ++i);
getline()
自动动态(重新)分配所需的内存,以适应输入流中的下一行。它还将输入中的任何新行('\n')保留在字符串末尾


其次,ctrl-D通常用于从终端终止对程序的输入。

有效。我将其更改为

int main()
{
    int i,j,max,thesi,sum=0,countCH=0,mikos=0;
    char strings[R][C]; 

    printf("***Table of Strings - Names***\n\n");
for(i=0;(i<R && fgets(strings[i],C,stdin ));i++)
    ;

if(i==R)
    printf("\n**Table Full - input terminated \n");
for(i=0;i<R;i++)
    fputs(strings[i],stdout);
//Euresh megistou string
max=0;
sum=0;
for(i=0;i<R;i++)
{


        mikos=strlen(strings[i])-1;
        sum+=mikos; 
        if(mikos>max)
        {

            max=mikos;
            thesi=i;
        }
}

printf("\nTo string me to megalitero mikos einai auto pou brisketai sthn %d seira \nkai einai to %s \nme mhkos %d",thesi+1,strings[thesi],max);
printf("\nO pinakas me ta strings periexei %d xaraktires\n",sum);


return 0;   

}
It works just fine only that strlen counts all the chars of the string including null char why is that i dont get it?
intmain()
{
int i,j,max,thesi,sum=0,countCH=0,mikos=0;
字符串[R][C];
printf(“***字符串表-名称***\n\n”);

对于(i=0),(i很多,所以空字符串是CTRL-D?我想在课堂上使用它,但我不想使用指向字符串的指针。我现在将尝试fgets,我会的tell@XanthoulaAtsalaki不,ctrl-D不是“空字符串”Ctrl-D向进程发出输入结束的信号。因此,在使用Ctrl-D后,您将无法通过终端发送更多的输入。正如我在回答中所说,
fgets
将保留新行字符(“\n”)在字符串的末尾,只要有空间。这就是为什么
strlen
比您预期的多一个,而不是因为nul终止符('\0')。
int main()
{
    int i,j,max,thesi,sum=0,countCH=0,mikos=0;
    char strings[R][C]; 

    printf("***Table of Strings - Names***\n\n");
for(i=0;(i<R && fgets(strings[i],C,stdin ));i++)
    ;

if(i==R)
    printf("\n**Table Full - input terminated \n");
for(i=0;i<R;i++)
    fputs(strings[i],stdout);
//Euresh megistou string
max=0;
sum=0;
for(i=0;i<R;i++)
{


        mikos=strlen(strings[i])-1;
        sum+=mikos; 
        if(mikos>max)
        {

            max=mikos;
            thesi=i;
        }
}

printf("\nTo string me to megalitero mikos einai auto pou brisketai sthn %d seira \nkai einai to %s \nme mhkos %d",thesi+1,strings[thesi],max);
printf("\nO pinakas me ta strings periexei %d xaraktires\n",sum);


return 0;   

}
It works just fine only that strlen counts all the chars of the string including null char why is that i dont get it?