C 写入字符数组时缓冲区溢出

C 写入字符数组时缓冲区溢出,c,arrays,char,ascii,buffer-overflow,C,Arrays,Char,Ascii,Buffer Overflow,有人能帮我吗? 我真的不知道为什么这个代码不能正常工作。 只想把一根绳子一分为二。然而,奇怪的事情发生了,它写的是6char,而不是3char。for循环执行3次 代码 #include <stdio.h> #include <string.h> int main(){ char array[100] = "aaa-aaaaa"; char first[100]; char last[100]; for(int i = 0; i <

有人能帮我吗? 我真的不知道为什么这个代码不能正常工作。 只想把一根绳子一分为二。然而,奇怪的事情发生了,它写的是
6char
,而不是
3char
。for循环执行
3次


代码

#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;
}

完成第一个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';

每个字符串都必须以
\0
字符结尾。它不会打印出来。但是你把它放在你的
数组的哪个位置呢?@MFisherKDX甚至比
memset
更简单,只要用
{0}
@MFisherKDX初始化就行了。老实说,我知道我需要显式终止char数组^^^^你并不总是需要终止char数组。您需要终止打算与C字符串函数一起使用的内容。当您尝试使用prinft打印字符串时,也会使用相同的机制。
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';