首页 > 解决方案 > 将字符串存储在变量中

问题描述

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

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

标签: c

解决方案


这是未定义的行为

仅仅因为您的编译器从源代码中生成了二进制文件,并不意味着该代码是合法的。访问超出分配的内存是未定义的行为。

在您的代码中,ls_thread有 10 个成员,这表明只保留一个 9 - char string和一个 null 终止符。尝试访问第 10 个元素是对无效内存的冒险,这会导致 UB。


推荐阅读