Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 未打印指针字符串的第一个字符_C_String_Dynamic_Initialization_Malloc - Fatal编程技术网

C 未打印指针字符串的第一个字符

C 未打印指针字符串的第一个字符,c,string,dynamic,initialization,malloc,C,String,Dynamic,Initialization,Malloc,我正在尝试为长度未知的字符串分配动态内存(我正在尝试模拟compi问题),但当我这样做时,我的printf不会打印第二次执行的第一个字符。我用的是gcc 5.0。我附上了输出的屏幕截图 #包括 #包括 #包括 空干管(){ //变化无常 //以字符串形式输入位流 字符*字符串输入; //输入数量 int数据计数; //要分配给阵列的内存大小 int-dataSize; //文件指针 文件*fptr; //循环计数 int i; //二进制声明 long num,decimal_num,余数,ba

我正在尝试为长度未知的字符串分配动态内存(我正在尝试模拟compi问题),但当我这样做时,我的printf不会打印第二次执行的第一个字符。我用的是gcc 5.0。我附上了输出的屏幕截图

#包括
#包括
#包括
空干管(){
//变化无常
//以字符串形式输入位流
字符*字符串输入;
//输入数量
int数据计数;
//要分配给阵列的内存大小
int-dataSize;
//文件指针
文件*fptr;
//循环计数
int i;
//二进制声明
long num,decimal_num,余数,base=1,binary=0,noOf1=0;
//内存分配
//输入N
printf(“输入N(输入的数量):\N”);
scanf(“%d”和数据计数);
//+1表示逗号(,)字符
数据大小=((sizeof(int)+1)*数据计数);
//初始化指针分配的内存
stringInput=malloc(数据大小);
如果(!stringInput)
{ 
perror(“错误分配内存”);
中止();
}
memset(stringInput,0,数据大小);
//扫描数字+测试
scanf(“%s”,stringInput);
//初始化文件指针
fptr=fopen(“inputString.txt”,“w”);
fprintf(fptr,“%s”,字符串输入);
免费输入;
//十进制转换
while(num>0){
余数=num%2;
//1的计算编号
如果(余数==1)
noOf1++;
//转化
二进制=二进制+余数*基数;
num=num/2;
基数=基数*10;
}
}
更改此选项:

dataSize = ((sizeof(int)+1)* dataCount);
为此:

dataSize = ((sizeof(char) + 1) * (dataCount + 1));
因为您要存储的是字符串,而不是数字

请注意我在末尾使用的
+1
,它用于字符串NULL终止符



PS:
int

sizeof int
提供存储
int
所需的字节数。这与将此值写入十进制数字所需的字符数无关。请改用
sizeof(char)
,或者忽略它,因为
sizeof(char)
始终为1。空终止符需要+1。您应该将
dataCount
作为参数传递给
scanf()
,这样当用户键入的字符数超过
dataCount
时,它就不会溢出
stringInput
scanf(%*s),dataCount,stringInput)
@FelixPalmen是的,我需要将输入作为字符串,但是字符串将包含int和逗号,并且没有空格,最大为50 int,但是由于输入是字符串形式,我们处理的是字符(1字节),而int是8字节(x64环境),因此我的最大数组大小=(50个整数*8+49逗号+1(表示\0))=450哦gg我解决了我自己的问题lol a lil 1有巨大的1头不要发布屏幕截图。而是将实际文本复制粘贴到问题中,假设每个“数字”只有一个十进制数字。哦,
+1
为这里的每一项添加一个。老实说,我不理解OPs代码,但它对未初始化的
num
sizeof(char)
进行了一些计算,它是一个字符的大小,表示整数的字符序列的大小是它的多个。
,“
的大小也是
sizeof(char)
这一次实际上只有一次。这里使用
+1
假设一个字符是一个字节。我遗漏了什么吗?对不起,我的评论是错误的,但实际上,它增加了两个字节。再看看OP的代码,这看起来不像问题的真正根源。使用未初始化的变量是错误的,使用
scanf(“%s”,…)
是错误的,错误的事情可能发生在代码中的任何地方。
dataSize = ((sizeof(char) + 1) * (dataCount + 1));