【发布时间】:2017-12-15 22:05:58
【问题描述】:
请考虑下面的代码。
#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) 可以正常工作。
【问题讨论】:
-
数组在这里是字符串的一个元素。
-
strlen(a)很可能是 UB.. -
如果您尝试使用
"raj"而不是"rajeev",它会起作用。这是因为您没有计算空终止符。 -
strcpy(a,"rajeev");是 UB,因为它正在访问分配的内存。
标签: c arrays string strcpy strlen