strcpy(*p,”helloworld”);什么意思
时间: 2024-02-20 07:58:17 浏览: 17
这段代码存在问题,无法编译通过。`strcpy()`函数的第一个参数应该是一个指向字符数组的指针,而`*p`并没有被定义为指向字符数组的指针。
如果将`*p`定义为指向字符数组的指针,那么这段代码的含义是将字符串"helloworld"复制到指针`p`所指向的字符数组中。具体实现如下:
```
char str[20]; // 定义一个长度为20的字符数组
char *p = str; // 指针p指向字符数组str的首地址
strcpy(p, "helloworld"); // 将字符串"helloworld"复制到字符数组中
```
这样,字符数组`str`中就存储了字符串"helloworld",指针`p`也指向了字符数组的首地址。
相关问题
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()` 来释放它。
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;
这段代码的问题在于:在函数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;
}
```