Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.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_Char_Base64 - Fatal编程技术网

C 检查字符串中的每个字符会产生意外结果

C 检查字符串中的每个字符会产生意外结果,c,string,char,base64,C,String,Char,Base64,我正在制作一个base64编码器/解码器,我有一个将输入二进制编码为base64表示的函数。输入为0和1的字符串 我的if语句未能验证字符串中的每个char是否为“0”或“1”。它说每个char都不是“0”或“1”。即使是这样 我的代码:(不是完整的函数代码…) #包括 #包括 字符*enc(字符*); 内部主(空) { enc(“1101010100101001010010101001”); 返回0; } 字符*enc(常量字符*数据) { int i; 对于(i=0;i始终为true。我想你

我正在制作一个base64编码器/解码器,我有一个将输入二进制编码为base64表示的函数。输入为
0
1
字符串

我的
if
语句未能验证
字符串中的每个
char
是否为“
0
”或“
1
”。它说每个
char
都不是“
0
”或“
1
”。即使是这样

我的代码:(不是完整的函数代码…)

#包括
#包括
字符*enc(字符*);
内部主(空)
{
enc(“1101010100101001010010101001”);
返回0;
}
字符*enc(常量字符*数据)
{
int i;
对于(i=0;i
这将输出每个
char
都是而不是
0
1

表意文字:

如果char不是0或char不是1->始终为true。我想你的意思是:

英语中的“nota或b”在布尔逻辑中翻译为“not(a或b)”,根据德摩根定律,它相当于“(nota)和(notb)”

如果char不是0或char不是1->始终为true。我想你的意思是:

英语中的“nota或b”在布尔逻辑中翻译为“not(a或b)”,根据德摩根定律,它相当于“(nota)和(notb)”

如果char不是0或char不是1->始终为true。我想你的意思是:

英语中的“nota或b”在布尔逻辑中翻译为“not(a或b)”,根据德摩根定律,它相当于“(nota)和(notb)”

如果char不是0或char不是1->始终为true。我想你的意思是:


英语中的“非a或b”在布尔逻辑中翻译为“非(a或b)”,根据德·摩根定律,它相当于“(非a)和(非b)”。

put
&
运算符,用于检查
if(数据[i]!='0'&&data[i]!'1')
put
运算符,用于检查
if(数据[i]!'0'&&data[i]!'1'))
put
&
用于检查
if(数据[i]!=“0”&&data[i]!=“1”)的运算符
put
&
用于检查
if(数据[i]!=“0”&&data[i]!=“1”)的运算符

根据
printf
语句,我理解您是在检查以确保
数据[i]
既不是0也不是1(为了打印错误消息),它转换为
(不是0)和(不是1)
。如果要检查
数据[i]
是否为0或1,则应使用
数据[i]==0 | |数据[i]==1
是的,这是正确的,否则输入的格式会不正确。我在IDEone中尝试了
&
方法,效果很好。忍者编辑。这对我来说是个错误,它确实有效,但当我重新运行程序时,
stdout
没有清除,所以我认为它给出了相同的输出!根据
printf
语句,我明白了您正在检查以确保
数据[i]
既不是0也不是1(以便打印错误消息),这将转换为
(不是0)和(不是1)
。如果要检查
数据[i]
是0还是1,则应使用
数据[i]==0 | |数据[i]==1
是的,这是正确的,否则输入的格式会不正确。我在IDEone中尝试了
&
方法,效果很好。忍者编辑。这对我来说是个错误,它确实有效,但当我重新运行程序时,
stdout
没有清除,所以我认为它给出了相同的输出!根据
printf
语句,我明白了您正在检查以确保
数据[i]
既不是0也不是1(以便打印错误消息),这将转换为
(不是0)和(不是1)
。如果要检查
数据[i]
是0还是1,则应使用
数据[i]==0 | |数据[i]==1
是的,这是正确的,否则输入的格式会不正确。我在IDEone中尝试了
&
方法,效果很好。忍者编辑。这对我来说是个错误,它确实有效,但当我重新运行程序时,
stdout
没有清除,所以我认为它给出了相同的输出!根据
printf
语句,我明白了您正在检查以确保
数据[i]
既不是0也不是1(以便打印错误消息),这将转换为
(不是0)和(不是1)
。如果要检查
数据[i]
是0还是1,则应使用
数据[i]==0 | |数据[i]==1
是的,这是正确的,否则输入的格式将不正确。我在IDEone中尝试了
&
方法,它可以工作。忍者编辑。这是我这方面的一个错误,它可以工作,但当我重新运行程序时,
标准输出没有清除,所以我认为它给出了相同的输出!
#include <stdio.h>
#include <string.h>

char *enc(char *);

int main(void) 
{
    enc("1101010100100101001010010101001"); 
    return 0;
}

char *enc(const char *data)
{
    int i;
    for(i = 0; i < strlen(data); i++)
    {
        if(data[i] != '0' || data[i] != '1') 
        {
            printf("index %d is not 0 or 1\n", i);
            printf("instead it is: %c\n", data[i]);
        }
    }
    return NULL;
}
if(data[i] != '0' || data[i] != '1') 
if(data[i] != '0' && data[i] != '1')