有人会解释如何将字符串(或字符数组)存储在较短长度的char数组中吗?例如,以以下示例为例。
int main()
{
char ls_thread[10];
sprintf(ls_thread,"Learning C is %s\n","fun");
printf("%s",ls_thread);
printf("Length of the string is %d",strlen(ls_thread));
return 0;
}
还有可能出现什么潜在问题?
答案 0 :(得分:2)
仅仅是因为您的编译器从源代码中生成了二进制文件-并不意味着代码是 legit 。访问超出分配的内存是未定义的行为。
在您的代码中,ls_thread
有10个成员,这表示最好只保留9-{char
string ,再加上一个空终止符。尝试访问超过第10个元素是对无效内存的冒险,这会导致UB。
答案 1 :(得分:2)
您在代码中执行的操作是无效写入。
考虑内存
[-][-][-][-][-][-][-][-][-][-][-][-][-][-][-][-][-][-][-][-] ...
| reserved memory | non reserved memory ...
您正在做的事情是在您要的内存上写东西,而且也在您没有的内存上写东西:
[L][e][a][r][n][i][n][g][ ][C][ ][i][s][ ][f][u][n][\n][\0][-] ...
| reserved memory | non reserved memory ...
在不是您自己的内存中写入将导致未定义的行为,因为它可以作用于其他程序内存甚至您的内存。
您必须严格使用C语言,仅使用要求的内容。
使用malloc
时,请使用free
;一切都会好起来的。