8.void getmemory(char *p) { p=(char *) malloc(100); strcpy(p,“hello world”); } int main( ) {c char *str=NULL; getmemory(str); printf(“%s/n”,str); free(str); return 0;
时间: 2024-01-19 18:04:06 浏览: 76
这段代码的问题在于:在函数getmemory中,参数p是一个指向char类型的指针,但在函数中对p进行了赋值操作,即将p指向了一个malloc分配的内存空间,但这个赋值操作只在函数内部生效,函数外部的指针str并没有指向新分配的内存空间,而是仍然为NULL,所以在主函数中打印str时会出现问题。正确的做法是将参数p改为指向指针的指针,这样在函数中对*p进行操作时,会对主函数中传入的指针进行操作,从而使主函数中的指针指向新分配的内存空间。修改后的代码如下:
```c
void getmemory(char **p) {
*p = (char *) malloc(100);
strcpy(*p, "hello world");
}
int main() {
char *str = NULL;
getmemory(&str);
printf("%s/n", str);
free(str);
return 0;
}
```
相关问题
void GetMemory( char *p ) { p = (char *) malloc( 100 ); } void main() { char *str = NULL; GetMemory( str ); strcpy( str, hello world );printf( str ); }
代码中存在几个问题:
1. 在函数 `GetMemory()` 中,你想要分配内存并将其地址赋给指针 `p`,但是这里的 `p` 是一个局部变量,对其进行赋值不会影响到 `main()` 函数中的指针 `str`。
2. 在 `main()` 函数中,你将 `str` 初始化为 `NULL`,然后将其作为参数传递给 `GetMemory()` 函数。但是由于问题1,`str` 的值并没有被修改为新分配的内存地址,因此在之后的 `strcpy()` 和 `printf()` 中使用 `str` 会导致未定义的行为。
3. 在 `strcpy()` 中,字符串应该用双引号括起来,即 `"hello world"`。
为了修复这些问题,你可以修改代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void GetMemory(char **p) {
*p = (char *) malloc(100);
}
int main() {
char *str = NULL;
GetMemory(&str);
strcpy(str, "hello world");
printf("%s\n", str);
free(str); // 释放内存
return 0;
}
```
这样修改后,`GetMemory()` 函数使用了一个指向指针的指针作为参数,通过修改指针的值来使其指向新分配的内存。在 `main()` 函数中传递 `&str` 来获取指向 `str` 的指针的地址。另外,`strcpy()` 中的字符串使用双引号括起来,并且在 `printf()` 中使用 `%s` 来打印字符串。最后,记得在不再使用内存时调用 `free()` 来释放它。
*1.简答题指出以下代码的输出结果及错误或不足(6分) void GetMemory( char *p) P=(char*)malloc( 100);} void Test(void){ char *str =NULLGetMemory(str); strcpy(str , "hello world")printf(str); }
代码的输出结果是无法确定的,因为存在错误和不足。以下是对代码的分析:
1. 函数声明的格式不正确,应该使用括号将参数括起来,并且缺少分号。应该修改为:
`void GetMemory(char *p) { P=(char*)malloc(100); }`
2. 在Test函数中,定义了一个指针变量`str`并将其初始化为`NULL`,然后调用了`GetMemory`函数,并将`str`作为参数传递给它。但是在调用`GetMemory`函数之前,缺少了赋值运算符`=`。应该修改为:
`char *str = NULL; GetMemory(str);`
3. 在调用`strcpy`函数之前,应该先确保`str`指针指向了有效的内存空间。但是在代码中,`GetMemory`函数内部为`P`分配了内存空间,而不是传入的`p`。应该修改为:
`strcpy(p, "hello world");`
4. 在调用`printf`函数之前,应该先确保`str`指针指向了有效的字符串。但是在代码中,`str`指针仍然为`NULL`,没有指向任何有效的内存空间。这将导致未定义的行为。应该在调用`strcpy`之后立即打印字符串,或者在打印之前添加判断语句来确保指针有效。
综上所述,代码存在语法错误和逻辑错误,无法确定输出结果。应该修复上述错误并合理地分配和释放内存,以避免潜在的问题。
阅读全文