2012-02-12 70 views
1

对我的任务的进一步帮助我早些时候问过。从标准输入读取字符串后,它会检查任何非ASCII字符。它发现的任何内容都将显示它的十六进制值和零偏移量。我知道它显示十六进制很好,但我很难弄清楚如何显示偏移量。这是我当前的代码,用于提出这个问题,只显示相关的行。在C中,检查字符串中的偏移量并计算字节数

#define MASK 0x80 

auto int inChar; 

if ((inChar & MASK) == MASK) 
{ 
    printf("NON-ASCII INPUT: %x detected at offset %#x \n", inChar, inChar); 
    nonascii = 1; 
} 

还有一件事我需要帮助,希望这会更容易回答。如果行读取除了ASCII之外什么也没有,它就是这样写出来并显示读取的总字节数。我知道如何用整数和乘法来做到这一点,只需要计算一次做某事的次数,但教授似乎希望我们以更直接的方式做到这一点。

这是我写的代码。

if (nonascii == 0) 
    printf("The input stream was pure ASCII with a total of %d bytes read", (numBytes &= inChar)); 

非常感谢那些帮助我的人。

回答

1

inChar是一个字符,而不是偏移量。偏移表示在字符串中找到字符的位置的数组索引,并且您应该使用%d格式化程序将其作为十进制打印出来。

显示字符串长度的最简单方法是使用strlen()函数。但是如果你不允许使用它,那么当你退出循环时,字符串的长度就是数组index + 1。

2

inChar包含的字符读取;它不会携带有关字符在字符串中的位置的信息,因此无法计算出此变量的偏移量。

要看的地方是在哪里填写inChar与当前字符;不幸的是,我们没有看到这部分代码。最有可能的是,在这一点上,您正在从字符串中的某个索引中提取值,并且应该只使用相同的索引变量来显示偏移量。另一种可能性是通过在字符串内移动指针来提取字符串中的值。在这种情况下,该方法提取的偏移是通过使用指针运算:说你有指针指向字符串和stringIter一个指向当前处理的字符开头,然后寻求如何很远的指针是从对方会告诉你在字符串中的偏移量:stringIter - 字符串

相关问题