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