首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这段C程序为什么无法运行,该怎么解决

2012-04-12 
这段C程序为什么无法运行C/C++ code#includestdio.hvoid GetMemory(char *p){p(char *)malloc(100)}vo

这段C程序为什么无法运行

C/C++ code
#include<stdio.h>void GetMemory(char *p){    p=(char *)malloc(100);}void Test(void){    char *str;    GetMemory(str);    strcpy(str,"hello world");    printf(str);}void main(){    Test();}


这段程序为什么无法运行

[解决办法]
函数没有返回指针
[解决办法]
为str申请的动态内存不成功,可以用二级指针做函数参数。
[解决办法]
c语言中参数的传递都是按值传递的,也就是说传递的只是一个变量的副本而已.
副本的改变不足以影响到本体.
所以,用返回值

char* GetMemory(char *p)
{
p=(char *)malloc(100);
return p;
}
或者2级指针:

void GetMemory(char **p)
{
*p=(char *)malloc(100);
}
调用的时候 GetMemory(&str);
[解决办法]
C/C++ code
#include<stdio.h>void GetMemory(char *p){    p=(char *)malloc(100);}void Test(void){    char *str;    GetMemory(str);    strcpy(str,"hello world");//这样是不行的。“hello world”是常量来的。你需要在之申请一个字符指针来保存的。    printf(str);}void main(){    Test();}
[解决办法]
#include<stdio.h>
void GetMemory(char **p)
{
*p=(char *)malloc(100);
}

void Test(void)
{
char *str;
GetMemory(&str);
strcpy(str,"hello world");
printf(str);
}

void main()
{
Test();
}



[解决办法]
void GetMemory(char *p)
{
p=(char *)malloc(100); //只是给形参p赋值了一个地址 并不是Test中的str
}


[解决办法]
GetMemory(str);
也错了。。内存没有申请成功
[解决办法]
楼主,
1 在 GetMemory 中形参为 char *p, 而函数内使用 p, 这种情况基本上就是错误的,形参是局部于函数的,正常情况下是 *p ……, 这样改变的是指向的内容,但是也可以用 return 把这个局部变量返回,这样也是可以的。所以有两种修改 GetMemory 的方法。
2 另外在动态内存分配后一般要验证是否分配成功,这是好的编程习惯之一。

我贴一段代码:
C/C++ code
#include <stdio.h>#include <stdlib.h>char * GetMemory(char *p) {     p = (char *)malloc(100);     if (NULL == p) {                 // 验证动态内存是否分配成功        printf("malloc error!\n");        exit(EXIT_FAILURE);          // 使用 EXIT_FAILURE 提高可移植性     }     return p;}void Test(void) {     char *str;     str = GetMemory(str);     strcpy(str, "Hello World!");     printf(str);}     int main(void) {     Test();          return 0;}
[解决办法]
以前有本好像叫做 高质量c编程的书,专门有讨论这个问题!

热点排行
Bad Request.