C语言数组改错(c语言程序设计)

C语言数组改错(c语言程序设计),第1张

for语句后多了个分号,且输入字灶数符时要注意空格,回车等任意字符都会传进去,轿局所以在scanf()函数后闭辩让面加上getchar(),来接受上面输的回车或空格#include<stdio.h>

main()

{

char a[3]

int i

for(i=0i<3i++)

{

scanf("%c",&a[i])

getchar()

}

for(i=0i<3i++)

printf("%c ",a[i])

printf("\n")

}

第1题,楼上提供了两种方式,一种是利用malloc(或者calloc)函数,一种就是在C99标准下的变长数组。但是

楼主要注意一点区别,malloc分配的空间直到你的程序结束都可用,块之外可以访问到,而变长数组分配的空间在栈上,退出块之后就被“销毁”了。

第2题,在C里面有胡此一种办法可以实现

就是把一个数组包在一个结构体里面就可以了,具体实现如下

#include <stdio.h>

struct array {

a[30]

}

int

size(struct array * p)

{

return sizeof(p->a)/sizeof(int)

}

int

main(void)

{

struct array ary

printf( "the size of the array is %d\n", size(&ary) )

return 0

}

不怕,还有一招。你的数组分配空间的时候出了你本身需要的多分配一个,用来存取一个你的数组不和渗会涉及的元素,比如说如果你的数组的元素唤做脊全部都是正整数的话,你就把最后分配出来的那个多余的空间里放个负数比如说-1,然后在一个函数里面遍历整个数组,每过一个加1,同时检测这个特殊的元素,如果发现它就说明数组结束了,返回计数器里面的数就是数组的长度了(当然是狭义的,反正是你想要的那个元素组成的数组的长度)

#define TAIL -1

int

count(int * a)

{

int n

for ( n = 0*(a++) != TAILn++ )

return n

}

除此之外,应该就没有办法了。

至于你的第一个问题嘛,没太明白你的意思,不过大概知道是malloc分配空间free的问题,如果你担心内存因为自己遗忘而造成内存泄漏的话,你不妨每写一个malloc就在后面加一条单行注释//free()提醒自己这里有调用过一次malloc,然后到main函数return之前统一释放。当然这只是针对你调用malloc分配的空间不是非常庞大的情形,否则,你就得及时释放空间了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12554289.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存