Can';C程序中的t分裂数组
我试图将我的32位字符数组拆分为2个16位数组,但它给出了超过16位的奇怪输出。有什么可以帮忙的吗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
#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中的长度