# include <stdio.h>
# include <stdlib.h>
#include <string.h>
void main (void)

{
int size, i,j;
printf("enter no. of employee\n");
scanf("%d", &j);
printf("size of employee id\n");
scanf("%d",&size);
char *m[j];
for (i=0; i<j;i++) {
m[i] = (char*) malloc(size*sizeof(char));
}

for (i=0; i<j;i++) {
printf("Enter employee id of %d\n ",i+1);
getchar();
gets(m[i]);
}
printf("employee id are\n ");
for (i=0; i<j;i++){
puts(m[i]);
}
}

我制作了一个程序,可以动态地接受用户关于no的输入.和他们的ID大小,那么 但是每次打印的时候我的输出都缺少第一个字符,而且我也没能发现错误

推荐答案

对于根据C标准的启动器,不带参数的函数main应声明如下

int main( void )

GET函数不安全且不受C标准支持,请改用标准C函数scanffgets.

至于您的问题,则第一个字符会因此调用而丢失

getchar();

在for循环中.

你可以写来代替.

while ( getchar() != '\n' );
for ( i = 0; i < j; i++ ) 
{
    printf("Enter employee id of %d\n ",i+1);
    fgets( m[i], size, stdon );
    m[i][ strcspn( m[i], "\n" ) ] = '\0';
}

并且您应该在退出程序之前释放所有分配的内存

for ( i = 0; i < j; i++ )
{
    free( m[i] );
}

此外,如果您将判断结果,如果这些scanf调用,程序将更加安全

scanf("%d", &j);

scanf("%d",&size);

至少输入的值大于0.

C++相关问答推荐

C限制限定符是否可以通过指针传递?

C指针地址和转换

以c格式打印时间戳

带有sigLongjMP中断I/O的异常处理程序

#定义SSL_CONNECTION_NO_CONST

使用nmake for程序比Hello World稍微复杂一些

如何读取程序中嵌入的数据S自己的ELF?

具有正确标头的C struct 定义问题

try 查找带有指针的数组的最小值和最大值

如何使用WRITE()以指针地址的十六进制形式写入标准输出

如何在MSVC中使用intSafe.h函数?

C:面筋蛋白';为什么不刷新窗口?

Malloc和对齐

浮点正零何时不全为零?

将不同类型的指针传递给函数(C)

";错误:寄存器的使用无效;当使用-masm=intel;在gcc中,但在AT&;T模式

当 n 是我们从用户那里获得的整数时,创建 n 个 struct 参数

如何为avr atmega32微控制器构建C代码,通过光电二极管捕获光强度并通过串行通信传输数据

cs50拼写器分配中的无限循环

如何在 C 中编辑 struct 体中的多个变量