/*使用指针接受和打印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/