额外的数字被追加到字符串,不知道为什么?

额外的数字被追加到字符串,不知道为什么?

问题描述:

Number(string binary) 
     { 
      int raw_string_int[size]; 
      char raw_string_char[size]; 
      strcpy(raw_string_char,binary.c_str()); 
      printf("Raw String is %s",raw_string_char); 

       for (int i=0;i<size;i++) 
       { 

        raw_string_int[i] = int(raw_string_char[i]); 
        printf("%i\n",int(raw_string_char[i])); 
        if (raw_string_int[i] != 0 || raw_string_int[i] != 1) 
        { 
         printf("ERROR NOT A BINARY NUMBER\n"); 
         exit(0); 
        } 
       } 

嗨,我在命令提示符下输入0001作为二进制文件,但raw_string_char附加了两个额外的数字。任何人都可以向我解释为什么这是?回车是否被作为字符引入?额外的数字被追加到字符串,不知道为什么?

这是我在命令提示符处获得什么:

./test 
0001 
Raw String is 000148 
ERROR NOT A BINARY NUMBER 

要打印的每一个字符在raw_string_char。直到第一个零字符(即'\0',而不是0)C风格的字符串。

更改为for (int i = 0; raw_string_char[i] != 0 && i < size; i++)

+0

没有工作...相同的输出。 – ChitownDev 2010-09-17 20:14:46

+0

这是真的,但不是问题的原因。 – Porculus 2010-09-17 20:15:16

您在第一个printf中忘记了“\ n”。 48来自第二个printf,并且是将第一个“0”(ASCII 0x30 = 48)转换为int的结果。

要将文本0或1转换为相应的整数,您需要减去0x30。

+0

我在printf语句中包含了一个\ n,似乎已经在某种程度上解决了这个问题。我现在得到原始字符串0001的正确值。但之后48打印出来,我不知道为什么。你可以进一步了解为什么printf语句会改变数组的值? – ChitownDev 2010-09-17 20:22:02

+0

要将文本数字转换为相应的整数,首选减去“0”而不是0x30。 0x30是'0'的ASCII码;但是在切换到其他文本编码方案时,0x30可能不起作用。 “0”更具可读性。 – 2010-09-18 00:19:20

raw_string_char永远不会初始化,额外的字符可能是由于这一点。使用memset来初始化数组。

memset(raw_string_array, 0, size); 
+0

这不是必需的。 strcpy添加一个空终止符。 – Porculus 2010-09-17 20:16:45

+0

仍然获得相同的输出... – ChitownDev 2010-09-17 20:18:18

+0

Procolus的答案是正确的,我敢打赌,如果您将\ n添加到第一个printf,您将在换行符中看到48个! – display101 2010-09-17 20:32:39

你的假设char('0') == int(0)char('1') == int(1)只是不成立。在ASCII中,这些字符的值为48和49.

您应该如何获取数字字符的整数值是减去'0'而不是简单转换(raw_string_int[x] = raw_string_char[x] - '0';)。

虽然我认为你有概念上的问题。该数组最后不能填满有效值(相应的C字符串至少包含一个空终止符,它不是有效的二进制字符)。您可以使用该字符串的size()方法来确定该字符串实际包含多少个字符。当然,如果binary字符串包含size个字符或更多,那么您冒着缓冲区溢出的风险。

如果目的是检查输入是否是有效的二进制数,为什么你不能测试原始字符串,为什么你会复制数据到另外两个数组?

与其他人一样,'0'被转换为整数48.您并不需要将C++字符串转换为C样式字符串。你可以在C++字符串上使用迭代器或索引操作符[]。您还需要使用逻辑AND & &而不是逻辑OR ||在你的if语句中。

#include<cstdio> 
#include<string> 

void Number(std::string binary) { 
    for(std::string::const_iterator i = binary.begin(); i != binary.end(); i++) 
     if(*i != '0' && *i != '1') 
     { 
     printf("ERROR NOT A BINARY NUMBER\n"); 
      return; 
     } 
} 

int main() { 
    Number("0001"); 
}