c - For 循环运行太频繁
问题描述
我有一个 for 循环,它应该运行 4 次,但运行了 6 次。你能解释一下这种行为吗?这很奇怪,因为 stringarr1 没有改变。
编辑:我想删除所有“!” 从我的第一个字符串中,并希望将字母保存在第二个字符串中。
#include <stdio.h>
#include <math.h>
#include <string.h>
int main(){
char stringarr1[] = "a!bc";
char stringarr2[] = "";
printf("%d\n", strlen(stringarr1)); // lenght --> 4
for (size_t i = 0; i < strlen(stringarr1); i++)
{
printf("i: %d\n", i);
if (stringarr1[i] != '!') {
stringarr2[strlen(stringarr2)] = stringarr1[i];
printf("info: != '!'\n");
}
}
}
解决方案
您的代码可以运行任意次数。你写的超出了结尾,stringarr2
所以你可能会破坏堆栈并覆盖局部变量。你的意思可能是这样的:
#include <stdio.h>
#include <math.h>
#include <string.h>
int main(){
char stringarr1[] = "a!bc";
char stringarr2[10];
int len = strlen(stringarr1);
printf("%d\n", len); // lenght --> 4
for (size_t i = 0; i < len; i++)
{
printf("i: %d\n", i);
if (stringarr1[i] != '!') {
stringarr2[len] = stringarr1[i];
printf("info: != '!'\n");
}
}
}
就像其他人说的那样,您在这里想要完成什么并不是很清楚。但是在 C 中,像这样的声明char s[] = "string"
只分配足够的内存来存储赋值右侧的任何内容。如果在您的情况下这是一个空字符串,则只分配一个字节,以存储字符串结尾的“空”字符。您需要像我一样明确指定要分配的字节数作为数组大小,或者使用动态内存分配。
推荐阅读
- webkit - 使用 webkit 的剧作家无法加载资产
- cgal - [cgal]; 3D Delaunay 三角剖分
- python - 了解 scikit-learn 中用于 XGBoost 排名的组
- java - 无法使用 Jsoup 登录页面
- javascript - 如何在 react-native 中过滤数组中的数据
- angular - 角度材质动态菜单内容未显示
- python - 将消息转发到带有 pyrogram 的私人群组
- forms - 如何填充在线表单的字段
- javascript - 如何在 JavaScript 上捕获双击鼠标中键(滚轮)事件?
- bash - bash/sed/awk:替换任意文件中的任意子字符串