程序从键盘接受5个字符串

时间:2014-05-03 12:24:59

标签: c arrays string pointers

/ *程序接受并使用指针* /

打印5个字符串
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define SIZE 100

int main()
{
    char **s;
    int i;
    s = (char *)malloc(sizeof(char)*5);
    for(i=0;i<5;i++)
    {
        *(s+i) = (char *)malloc(sizeof(char)*SIZE);
    }

    printf("enter 5 strigs\n");
    for(i = 0;i<5;i++)
    {
       fgets((s+i),SIZE,stdin);
    }
    //printing the strings
    for(i = 0;i<5;i++)
    {
            puts((s+i));
    }
     return 0;
  }

这个程序接受来自键盘的5个字符串并在屏幕上打印。它工作正常,但显示很多警告。还有其他方法可以做同样的操作(仅使用指针)。请建议我。

2 个答案:

答案 0 :(得分:0)

代码中最大的问题是您没有为s分配足够的内存:

s = malloc(sizeof(char*)*5);
//                    ^
// Add an asterisk here

否则,它是未定义的行为。

第二大问题是你不是free你分配的任何内存。这是内存泄漏。要正确执行此操作,您需要一个循环,在free的每个元素上调用s,然后在s本身上调用:

for(i = 0;i<5;i++) {
    free(s[i]);
}
free(s);

最后,您不应该投射malloc的结果。

作为样式的一个点,请考虑为s中的元素数定义常量,方法与定义SIZE而不是直接使用100的方式相同。切换到数组样式的解引用也可能是有意义的,而不是手动执行指针算法,即puts(s[i]);而不是puts((s+i));

答案 1 :(得分:0)

int main() {

char **s;

int i;
s = (char **)malloc(sizeof(char*)*5); //double pointer (char**)
for(i=0;i<5;i++)
{
    *(s+i) = (char *)malloc(sizeof(char)*SIZE); 
}

printf("enter 5 strigs\n");
for(i = 0;i<5;i++)
{
   fgets(*(s+i),SIZE,stdin); // first location *(s+0)
}
//printing the strings
for(i = 0;i<5;i++)
{
        puts(*(s+i)); // first location *(s+0)
}
 return 0;

}