【发布时间】:2012-02-03 19:10:43
【问题描述】:
想弄清楚这一点,我的脑袋越来越乱。
任务是从用户那里获取一行文本,然后将其反向打印出来,包括每个字符的十六进制代码。
我认为它会很简单,一旦我了解了用法,可能就是这样。
我的想法是,我将使用 char stg_array[80] 设置我的变量,这将使我的最大大小为 80 个字符。
然后我会做一个
while( (stg_array[i] = getch() ) != '\n' )
{
i++;
}
然后我会使用strlen() 来确定实际长度(我意识到我已经有了它,只是想使用strlen() 进行练习)并进入一个for 循环,该循环将从strlen(stg_array)-1 倒计时和
printf("Array[%d] = %s Hex Value = %X", i, stg_array[i], i );
我了解如果用户键入的字符数超过 80 个,我可能会遇到缓冲区溢出错误。现在不担心这个。
我得到的是strlen() 将长度返回到文本中的第一个空格。
如果我跳过用户输入,只在中间使用固定的for 循环创建char stg_array[80]={"The quick brown fox."},比如10,程序就会崩溃。
我想我要出去吃午饭,了解 C 字符串数组的功能。
【问题讨论】:
-
为了将来参考,请使用
{ }按钮而不是粗体显示代码。 -
要回应@Marlon,请花点时间read about Stack Overflow's formatting syntax。
-
我看到你用单引号初始化 stg_array[80] 。这是一个字符串文字,你需要用双引号来做。 char stg_array[80]={"The quick brown fox."} 这可能就是你这样做时它会崩溃的原因。
-
问题在于 printf 中的 %s...您传递的是 char 而不是 char *