Can';C程序中的t分裂数组

Can';C程序中的t分裂数组,c,arrays,memcpy,C,Arrays,Memcpy,我试图将我的32位字符数组拆分为2个16位数组,但它给出了超过16位的奇怪输出。有什么可以帮忙的吗 #include <stdio.h> #include <string.h> #include "hexb.h" #include "flr.h" int main() { int i,j,k; char inbit[20]; char fdata[31],coeff[15],signb[15]; printf("Enter X(n) d

我试图将我的32位字符数组拆分为2个16位数组,但它给出了超过16位的奇怪输出。有什么可以帮忙的吗

#include <stdio.h>
#include <string.h>
#include "hexb.h"
#include "flr.h"


int main()
{   int i,j,k;  
    char inbit[20];
    char fdata[31],coeff[15],signb[15];
    printf("Enter X(n) data file with extension: ");
    scanf("%s",inbit);
    //strcpy(inbit,flr);
    printf(" Data in file :%s\n", flr(inbit));
    //printf(" Hex conversion : %s\n", hexc(flr(inbit)));
    strcpy(fdata,"11001101001011011001000101001000");
    printf(" Hex conversion : %s\n", fdata);
    memcpy(signb, fdata, 16);
    memcpy(coeff, fdata +16, 16);
    //signb[15] = fdata[15];
    //coeff[15] = fdata[31];
    printf(" part1  signbit : %s\n", signb);
    printf(" part2 valuebit : %s\n", coeff); return (0);}
这是解决办法

char fdata[33],coeff[17],signb[17];
printf("Enter X(n) data file with extension: ");
scanf("%s",inbit);
//strcpy(inbit,flr);
printf(" Data in file :%s\n", flr(inbit));
//printf(" Hex conversion : %s\n", hexc(flr(inbit)));
strcpy(fdata,"11001101001011011001000101001000");
printf(" Hex conversion : %s\n", fdata);
memcpy(signb, fdata, 16);
memcpy(coeff, fdata +16, 16);
signb[16] = '\0';
coeff[16] = '\0';
这是解决办法

char fdata[33],coeff[17],signb[17];
printf("Enter X(n) data file with extension: ");
scanf("%s",inbit);
//strcpy(inbit,flr);
printf(" Data in file :%s\n", flr(inbit));
//printf(" Hex conversion : %s\n", hexc(flr(inbit)));
strcpy(fdata,"11001101001011011001000101001000");
printf(" Hex conversion : %s\n", fdata);
memcpy(signb, fdata, 16);
memcpy(coeff, fdata +16, 16);
signb[16] = '\0';
coeff[16] = '\0';
这是解决办法

char fdata[33],coeff[17],signb[17];
printf("Enter X(n) data file with extension: ");
scanf("%s",inbit);
//strcpy(inbit,flr);
printf(" Data in file :%s\n", flr(inbit));
//printf(" Hex conversion : %s\n", hexc(flr(inbit)));
strcpy(fdata,"11001101001011011001000101001000");
printf(" Hex conversion : %s\n", fdata);
memcpy(signb, fdata, 16);
memcpy(coeff, fdata +16, 16);
signb[16] = '\0';
coeff[16] = '\0';
这是解决办法

char fdata[33],coeff[17],signb[17];
printf("Enter X(n) data file with extension: ");
scanf("%s",inbit);
//strcpy(inbit,flr);
printf(" Data in file :%s\n", flr(inbit));
//printf(" Hex conversion : %s\n", hexc(flr(inbit)));
strcpy(fdata,"11001101001011011001000101001000");
printf(" Hex conversion : %s\n", fdata);
memcpy(signb, fdata, 16);
memcpy(coeff, fdata +16, 16);
signb[16] = '\0';
coeff[16] = '\0';
首先,这条线

strcpy(fdata,"11001101001011011001000101001000");
导致缓冲区溢出,因为
fdata
(数组大小31)小于源字符串

同样地

memcpy(signb, fdata, 16);
memcpy(coeff, fdata +16, 16);
正在使用的目标缓冲区太小,无法接收您尝试复制到它们的daya量-
signb
coeff
是大小为15的数组,但您尝试将16个字节复制到它们中。如果不调用未定义的行为,则无法读取或写入超出数组边界的内容

一旦您调用了未定义的行为,那么尝试解释您得到的结果就没有什么意义了。您需要相应地调整数组的大小,使其足够大以满足您的要求-这包括允许使用所需的终止空字符作为字符串。

首先,这一行

strcpy(fdata,"11001101001011011001000101001000");
导致缓冲区溢出,因为
fdata
(数组大小31)小于源字符串

同样地

memcpy(signb, fdata, 16);
memcpy(coeff, fdata +16, 16);
正在使用的目标缓冲区太小,无法接收您尝试复制到它们的daya量-
signb
coeff
是大小为15的数组,但您尝试将16个字节复制到它们中。如果不调用未定义的行为,则无法读取或写入超出数组边界的内容

一旦您调用了未定义的行为,那么尝试解释您得到的结果就没有什么意义了。您需要相应地调整数组的大小,使其足够大以满足您的要求-这包括允许使用所需的终止空字符作为字符串。

首先,这一行

strcpy(fdata,"11001101001011011001000101001000");
导致缓冲区溢出,因为
fdata
(数组大小31)小于源字符串

同样地

memcpy(signb, fdata, 16);
memcpy(coeff, fdata +16, 16);
正在使用的目标缓冲区太小,无法接收您尝试复制到它们的daya量-
signb
coeff
是大小为15的数组,但您尝试将16个字节复制到它们中。如果不调用未定义的行为,则无法读取或写入超出数组边界的内容

一旦您调用了未定义的行为,那么尝试解释您得到的结果就没有什么意义了。您需要相应地调整数组的大小,使其足够大以满足您的要求-这包括允许使用所需的终止空字符作为字符串。

首先,这一行

strcpy(fdata,"11001101001011011001000101001000");
导致缓冲区溢出,因为
fdata
(数组大小31)小于源字符串

同样地

memcpy(signb, fdata, 16);
memcpy(coeff, fdata +16, 16);
正在使用的目标缓冲区太小,无法接收您尝试复制到它们的daya量-
signb
coeff
是大小为15的数组,但您尝试将16个字节复制到它们中。如果不调用未定义的行为,则无法读取或写入超出数组边界的内容


一旦您调用了未定义的行为,那么尝试解释您得到的结果就没有什么意义了。您需要相应地调整数组的大小,使其足够大以满足您的要求-这包括允许使用所需的终止空字符,以便将其用作字符串。

对于所需的内容来说,数组太小了一个字符(您必须指定元素的数量,而不是最后一个有效索引的数量)。此外,您忘记了C字符串所需的NUL终止符。因此,首先将数组放大两个条目:

char fdata[33],coeff[17],signb[17];
然后您必须将
'\0'
附加到
memcpy
s后面的两个较小数组中,因为它们不知道

这是因为
printf
s需要有效字符串


请注意,使用
scanf
读取字符串是不安全的,因为用户输入不受限制。这会导致未定义的行为(变体“缓冲区溢出”,这是典型的错误)。请使用
fgets
读取字符串(出于同样的原因,不要使用
gets
),或者限制
scanf
中的长度(我将不告诉您如何找到正确的格式字符串语法)。

数组对于所需的内容来说太小了一个字符(您必须指定元素的数量,而不是最后一个有效索引的数量)。此外,您忘记了C字符串所需的NUL终止符。因此,首先将数组放大两个条目:

char fdata[33],coeff[17],signb[17];
然后您必须将
'\0'
附加到
memcpy
s后面的两个较小数组中,因为它们不知道

这是因为
printf
s需要有效字符串


请注意,使用
scanf
读取字符串是不安全的,因为用户输入不受限制。这会导致未定义的行为(变体“缓冲区溢出”,这是典型的错误)。请使用
fgets
读取字符串(出于同样的原因,不要使用
gets
),或者限制
scanf
中的长度(我将不告诉您如何找到正确的格式字符串语法)。

数组对于所需的内容来说太小了一个字符(您必须指定元素的数量,而不是最后一个有效索引的数量)。此外,您忘记了C字符串所需的NUL终止符。因此,首先将数组放大两个条目:

char fdata[33],coeff[17],signb[17];
然后您必须将
'\0'
附加到
memcpy
s后面的两个较小数组中,因为它们不知道

这是因为
printf
s需要有效字符串

请注意,使用
scanf
读取字符串是不安全的,因为用户输入不受限制。这会导致未定义的行为(变体“缓冲区溢出”,这是典型的错误)。请使用
fgets
读取字符串(出于同样的原因,不要使用
get
),或者限制
sc中的长度