所以我一直在编写一个程序,将一个十进制数转换为它的布尔表示,但每次我编译返回值这是一个字符串,显示像p┐这样的其他字符是程序
//base 64 image
var image = signaturePad.toDataURL();
//form data serialized
data = $('#form').serializeArray();
//create and push imageData to array as object
b={ name: 'imageData', value: image };
data.push(b);
//send POST request
$.ajax({
url: './test1.php',
type: 'POST',
data: data
})
输出:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main (void)
{
signed char str[256];
int dec,rest;
int i = -1;
int j;
printf ("write a decimal number : ");
scanf ("%d",&dec);
do
{
rest = dec % 2;
dec/= 2;
for (j=i;j>-1;--j)
str[j+1]=str[j];
str[0]=rest+48;
++i;
} while (dec!=0);
printf ("the binary representation of this number is %s",str);
}
我不知道我是否遗漏了什么,但如果你们帮助我,我将不胜感激
答案 0 :(得分:2)
在C和C ++中,字符串以空值终止,这意味着每个有效字符串必须以一个代码为0的字符结尾。这个字符告诉每个正在处理这个字符串的函数它实际上已经结束了。
在你的程序中,你创建了一个字符串signed char str[256];
,它最初填充了随机数据;这意味着您为256个字符保留了空间并且它们都是垃圾,但系统不知道它们是无效的。尝试打印此字符串,看看会发生什么。
为了实际告诉系统你的字符串结束后说8个字符,第9个字符必须是NUL字符,或者只是0.在你的代码中你可以用两种方式完成:
str[i] = 0
或(甚至更简单)signed char str[256]={0};
,创建存储空间并用空值填充;在写完字符串后,你可以确定你写完的最后一个字符后的字符是NUL。答案 1 :(得分:1)
在do {} while ()
循环结束时,您需要将字符串中最后一个字符后面的字符设置为0
。这是您想要的最后一个字符(i
)加上一个字符的数组索引。这样,printf
就可以知道字符串的结束位置。 (否则,它怎么知道?)
答案 2 :(得分:0)
将str
变量初始化为NUL
。
void main (void)
{
signed char str[256];
int dec,rest;
int i = -1;
int j;
memset( str, '\0', sizeof(str) );
printf ("write a decimal number : ");
scanf ("%d",&dec);
do
{
rest = dec % 2;
dec/= 2;
for (j=i;j>-1;--j)
str[j+1]=str[j];
str[0]=rest+48;
++i;
} while (dec!=0);
printf ("the binary representation of this number is %s",str);
}