将字符串存储在变量中

时间:2018-09-03 16:05:35

标签: c

有人会解释如何将字符串(或字符数组)存储在较短长度的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; 
}

还有可能出现什么潜在问题?

2 个答案:

答案 0 :(得分:2)

这是undefined behavior

仅仅是因为您的编译器从源代码中生成了二进制文件-并不意味着代码是 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;一切都会好起来的。