/*使用指针接受和打印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个字符串并在屏幕上打印。它工作正常,但显示许多警告。有没有其他方法做同样的操作(仅使用指针)。请建议我。

最佳答案

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

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

否则,这是未定义的行为。
第二个最大的问题是你没有使用你分配的任何内存。这是内存泄漏。要正确执行此操作,您需要在free的每个元素上调用free的循环,然后在s本身上调用:
for(i = 0;i<5;i++) {
    free(s[i]);
}
free(s);

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

关于c - 程序接受键盘上的5个字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23444365/

10-09 05:04