请考虑以下代码。
#include<stdio.h>
#include<string.h>
void main()
{
char a[6], b[6];
strcpy(a,"rajeev");
printf("print A:");
for(int i=0;i<strlen(a);i++)
{
printf("%c",a[i]);
}
strcpy(b,a);
printf("print B:");
for(int i=0;i<strlen(b);i++)
{
printf("%c",b[i]);
}
printf("trying to print A again");
for(int i=0;i<strlen(a);i++)
{
printf("%c",a[i]);
}
在运行这个程序时,在“尝试再次打印 A”部分没有打印任何内容,strlen(a)
将为 0。这意味着源数组将为空。
你能帮我理解这背后的现象吗?
但是,将 a[6]
的声明更改为 char* a=malloc(6)
可以正常工作。
最佳答案
字符串文字 "rajeev"
的类型为 char[7]。也就是说它具有静态存储持续时间并存储为像
char unnamed[] = { 'r', 'a', 'j', 'e', 'e', 'v', '\0' };
因此,如果您要使用函数 strcpy
将其内容复制为字符串,您需要在目标数组中提供足够的内存。例如
char a[7], b[7];
strcpy(a,"rajeev");
printf("print A:");
for ( size_t i = 0, n = strlen( a ); i < n; i++ )
{
printf("%c",a[i]);
}
//... and so on
考虑到函数 strlen
对字符进行计数,直到遇到终止零。因此,如果字符数组不包含此字符,则函数的行为未定义。
关于c - strcpy 函数无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45041402/