c - 写入 char 数组时缓冲区溢出
问题描述
有人可以帮我吗?我真的不知道为什么这段代码不能正常工作。只想将一个字符串一分为二。但是,发生了某种奇怪的事情,它写6 char
而不是3 char
. for 循环执行3 times
。
代码
#include <stdio.h>
#include <string.h>
int main(){
char array[100] = "aaa-aaaaa";
char first[100];
char last[100];
for(int i = 0; i < strlen(array); i++){
if(array[i] == 45){
for(int a = 0; a < i; a++){
first[a] = array[a];
}
for(int a = 0; a < (strlen(array) - (i+1)); a++){
last[a] = array[(a+i+1)];
}
}
}
printf("%s and the length is %d\n", first, strlen(first));
for(int i = 0; i < strlen(first); i++){
printf("%d ", first[i]);
}
printf("\n%s and the length is %d\n", last, strlen(first));
for(int i = 0; i < strlen(last); i++){
printf("%d ", last[i]);
}
return 0;
}
输出
aaa�� and the length is 6
97 97 97 -76 -1 127
aaaaa and the length is 6
97 97 97 97 97 %
解决方案
在第一个 for 完成后添加:first[a]='\0';
strlen 是通过从第一个元素迭代计算到\0
.
unsigned int firstLen=0, secLen=0;
while(array[firstLen]!='-'){
first[firstLen] = array[firstLen];
firstLen++;
}
first[firstLen]='\0';
secLen=firstLen;
while(array[secLen]!='\0'){
last[secLen-firstLen] = array[secLen];
secLen++;
}
last[secLen-firstLen]='\0';
推荐阅读
- c# - 如何从 Xamarin Forms App 发送打印到 Epson EM T82 POS 打印机?
- ios - iOS 应用程序安装形式 TestFlight 的行为不同于直接从 Xcode 安装的应用程序
- eclipse - gitignore 无法忽略某些目录下的文件
- android - 有没有一种方法可以在 android 编程中获取更改的联系人姓名而不是 CallLogs 中的缓存名称
- codeigniter - 如何在codeIgniter中使用ajax传递Controller方法
- email - Google App Engine 使用代码 308 响应
- android - Cordova 没有将 android 应用程序启动到模拟器
- ios - 在 swift 5 中使用 @dynamicCallable 有什么需要?
- python-3.x - Python Postgres插入错误:TypeError:字符串格式化期间并非所有参数都转换
- angular - 用于同时显示列表和详细信息组件的路由配置