繁体   English   中英

写入char数组时缓冲区溢出

[英]buffer overflow while writing to char array

有人可以帮我吗? 我真的不知道为什么这段代码无法正常工作。 只想将字符串分成两部分。 但是,发生某种奇怪的事情是它写了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';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM