/* 使用指针接受和打印 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
否则就是未定义的行为。
第二大问题是您没有释放
分配的任何内存。这是内存泄漏。要正确执行此操作,您需要一个循环,该循环在 s
的每个元素上调用 free
,然后在 s
本身上调用:
for(i = 0;i<5;i++) {
free(s[i]);
}
free(s);
最后,您不应该强制转换 malloc
的结果。
作为样式的一点,考虑为 s
中的元素数定义一个常量,就像您定义 SIZE
而不是使用 100
直接。切换到数组样式的取消引用也可能有意义,而不是手动进行指针运算,即 puts(s[i]);
而不是 puts((s+i));
关于c - 从键盘接受 5 个字符串的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23444365/