如何在字符串末尾没有p┐的情况下打印c中的字符串

时间:2017-06-21 09:42:42

标签: c

所以我一直在编写一个程序,将一个十进制数转换为它的布尔表示,但每次我编译返回值这是一个字符串,显示像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);
}

我不知道我是否遗漏了什么,但如果你们帮助我,我将不胜感激

3 个答案:

答案 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);
}