在 strcpy 中将目标字符串作为指针传递
Passing destination string as a pointer in strcpy
我最近知道了一个叫做 strcpy 的函数,strcpy 的语法是 char*strcpy(char * destination,const char * source) ,所以目标字符串可以是指向 char 的指针,但我的代码的输出是 null ,为什么?
#include <stdio.h>
#include <string.h>
//Compiler version gcc 6.3.0
int main()
{
char *text1;
char text2[]="ahhabsha";
strcpy(text1,text2);
printf("%s",text1);
return 0;
}
so destination string can be a pointer to char
不,目标字符串可以不是指针。
目的地必须是char类型的连续内存区域。第一个函数参数是一个指针指向那个区域。
您的代码正确地传递了一个 char 指针,但问题是指针 没有 指向任何内存。
通常有两种方法可以做到这一点。
像这样分配动态内存:
char text2[]="ahhabsha";
char* text1 = malloc(sizeof text2); // or malloc(1 + strlen(text2));
...
...
free(text1);
将 text1
更改为 char 数组 而不是 char 指针
char text2[]="ahhabsha";
char text1[sizeof text2];
在第二种情况下,当您调用 strcpy
时,text1
会自动从“字符数组”转换为“字符指针”
顺便说一句:
在许多系统上也有非标准的strdup
函数。它执行内存分配和字符串复制,因此您不需要调用 strcpy
。喜欢:
char text2[]="ahhabsha";
char* text1 = strdup(text2);
printf("%s\n", text1);
free(text1);
我最近知道了一个叫做 strcpy 的函数,strcpy 的语法是 char*strcpy(char * destination,const char * source) ,所以目标字符串可以是指向 char 的指针,但我的代码的输出是 null ,为什么?
#include <stdio.h>
#include <string.h>
//Compiler version gcc 6.3.0
int main()
{
char *text1;
char text2[]="ahhabsha";
strcpy(text1,text2);
printf("%s",text1);
return 0;
}
so destination string can be a pointer to char
不,目标字符串可以不是指针。
目的地必须是char类型的连续内存区域。第一个函数参数是一个指针指向那个区域。
您的代码正确地传递了一个 char 指针,但问题是指针 没有 指向任何内存。
通常有两种方法可以做到这一点。
像这样分配动态内存:
char text2[]="ahhabsha"; char* text1 = malloc(sizeof text2); // or malloc(1 + strlen(text2)); ... ... free(text1);
将
text1
更改为 char 数组 而不是 char 指针char text2[]="ahhabsha"; char text1[sizeof text2];
在第二种情况下,当您调用 strcpy
text1
会自动从“字符数组”转换为“字符指针”
顺便说一句:
在许多系统上也有非标准的strdup
函数。它执行内存分配和字符串复制,因此您不需要调用 strcpy
。喜欢:
char text2[]="ahhabsha";
char* text1 = strdup(text2);
printf("%s\n", text1);
free(text1);