为什么我的代码中的第二个 strcpy() 导致停止工作?
Why the second strcpy() in my code causes stop working?
我写了这段 C 代码:
#include<stdio.h>
#include<string.h>
int main()
{
char *i, *p, *p1="Hello";
strcpy(p,p1); //The first strcpy works.
printf("%s\n", p); //show copy successful
printf("Please hit a key to continue....\n");
getchar();
strcpy(i,p); //The second strcpy causes stop working problem. Why?
printf("%s\n", i);
return 0;
}
谁能告诉我为什么第二个 strcpy
不起作用?
我会说你 幸运 第一个 strcpy 首先起作用了!
您基本上声明了一个指向 char 的 POINTER,仅此而已。
为了让 strcpy 正常工作,你需要确保你有一个足够大的 char 数组来容纳你的副本。换句话说,首先为你的指针分配一些内存,或者使用数组...
问题是 strcpy
不会为您的字符串分配内存,因此如果您不这样做,它很可能会崩溃。我会说这是偶然的第一个实例。
你很幸运,程序只给你一个分段错误。您可以使用 malloc
或 calloc
分配内存,也可以使用函数 strdup
为您分配内存。
char *i, *p, *p1="Hello";
p = strdup(p1);
printf("%s\n", p); //show copy successful
printf("Please hit a key to continue....\n");
getchar();
i = strdup(p);
printf("%s\n", i);
free(p);
free(i);
之后别忘了释放内存!
您需要为字符分配内存。你可以例如这样做:
char* p1 = "Hello";
char* i = (char*)malloc(sizeof(char) * 6);
char* p = (char*)malloc(sizeof(char) * 6);
请不要错过 free
之后(return 之前):
free(p);
free(i);
此外,需要额外包含才能使用 malloc
和 free
:
#include<stdlib.h>
您的完整示例应如下所示:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char* p1 = "Hello";
char* i = (char*)malloc(sizeof(char) * 6);
char* p = (char*)malloc(sizeof(char) * 6);
// 1st copy
strcpy(p,p1);
printf("1st copy: %s\n", p);
// 2nd copy
strcpy(i,p);
printf("2nd copy: %s\n", i);
getchar();
// free prior allocated memory
free(p);
free(i);
return 0;
}
我写了这段 C 代码:
#include<stdio.h>
#include<string.h>
int main()
{
char *i, *p, *p1="Hello";
strcpy(p,p1); //The first strcpy works.
printf("%s\n", p); //show copy successful
printf("Please hit a key to continue....\n");
getchar();
strcpy(i,p); //The second strcpy causes stop working problem. Why?
printf("%s\n", i);
return 0;
}
谁能告诉我为什么第二个 strcpy
不起作用?
我会说你 幸运 第一个 strcpy 首先起作用了! 您基本上声明了一个指向 char 的 POINTER,仅此而已。 为了让 strcpy 正常工作,你需要确保你有一个足够大的 char 数组来容纳你的副本。换句话说,首先为你的指针分配一些内存,或者使用数组...
问题是 strcpy
不会为您的字符串分配内存,因此如果您不这样做,它很可能会崩溃。我会说这是偶然的第一个实例。
你很幸运,程序只给你一个分段错误。您可以使用 malloc
或 calloc
分配内存,也可以使用函数 strdup
为您分配内存。
char *i, *p, *p1="Hello";
p = strdup(p1);
printf("%s\n", p); //show copy successful
printf("Please hit a key to continue....\n");
getchar();
i = strdup(p);
printf("%s\n", i);
free(p);
free(i);
之后别忘了释放内存!
您需要为字符分配内存。你可以例如这样做:
char* p1 = "Hello";
char* i = (char*)malloc(sizeof(char) * 6);
char* p = (char*)malloc(sizeof(char) * 6);
请不要错过 free
之后(return 之前):
free(p);
free(i);
此外,需要额外包含才能使用 malloc
和 free
:
#include<stdlib.h>
您的完整示例应如下所示:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char* p1 = "Hello";
char* i = (char*)malloc(sizeof(char) * 6);
char* p = (char*)malloc(sizeof(char) * 6);
// 1st copy
strcpy(p,p1);
printf("1st copy: %s\n", p);
// 2nd copy
strcpy(i,p);
printf("2nd copy: %s\n", i);
getchar();
// free prior allocated memory
free(p);
free(i);
return 0;
}