arrays - 为什么 for 循环用最新的字符串填充整个数组?
问题描述
抱歉,如果这很简单,但我是 C 新手。我正在尝试创建一个循环,用多个字符串填充一个空的字符串数组。但是,最后,整个数组都被最新的元素填充了!下面是代码:
int main(void)
{
string array_test[2];
char string_test[300];
for (int i = 0; i < 2; i++)
{
snprintf(string_test, sizeof(string_test),"Test: %i", i);
array_test[i] = string_test;
}
for (int i = 0; i < 2; i++)
{
printf("%s\n", array_test[i]);
}
}
这将返回:
Test: 1
Test: 1
但我期待:
Test: 0
Test: 1
解决方案
因为您在所有迭代中使用相同的缓冲区来保存字符串。这将使以前的字符串被新字符串覆盖。
为每个字符串分配单独的缓冲区以避免这种情况。
/* put #include of required headers here */
int main(void)
{
string array_test[2];
char string_test[2][300];
for (int i = 0; i < 2; i++)
{
snprintf(string_test[i], sizeof(string_test[i]),"Test: %i", i);
array_test[i] = string_test[i];
}
for (int i = 0; i < 2; i++)
{
printf("%s\n", array_test[i]);
}
}
推荐阅读
- python-3.x - 我在语音助手中收到断言错误消息
- html - 在没有 tff 的情况下更改我的网站的字体系列
- python - Django Rest 框架,违反非空约束 DETAIL
- python - 在 Python3 中更新二维列表时的奇怪行为
- sccm - 如何修复 sccm 中的不合规客户端?
- reactjs - 如何修复 Material-UI Select w/MenuItem,其中 MenuItem 水平呈现?
- amazon-dynamodb - DynamoDB/Boto3 -- RecursionError: 调用 Python 对象时超出最大递归深度
- django - Django 和 python 文件在哪里?
- momentjs - 将 moment.js 对象发送到服务器但收到 Bad request(400) 错误
- java - 需要帮助 Java IntelliJ 不读取我的文件