【问题标题】:String printing with too many characters字符过多的字符串打印
【发布时间】:2018-10-09 10:34:44
【问题描述】:

基本上,我在这里有这个函数,当输入一个十进制值时,它会吐出一个十六进制值。这段代码工作得很好,但是当我将它逐字插入我正在处理的一组更大的代码中时,吐出的十六进制数字有 8 个额外的不必要的字符,后面跟着正确的十六进制值。关于如何解决它的任何想法?我被告知要终止十六进制字符串,但是我在哪里准确地做到这一点以及如何做到这一点?

#include <stdio.h>
#include <string.h>

int main(void){

 int decimalnum, quotient, remainder;
 int k, l = 0;
 char hexadecimalnum[100];
 char str[50];
 int m;
 char temp;
 int j;

 printf("enter decimal number: ");
 scanf("%d", &decimalnum);

 quotient = decimalnum;

 while (quotient != 0) {
    remainder = quotient % 16;
    if(remainder < 10) {
       hexadecimalnum[l++] = 48 + remainder;
    }
    else {
       hexadecimalnum[l++] = 55 + remainder;

    }
    quotient = quotient / 16;
 }

 // Display integer to character.
 for(k = l; k >= 0; k--) {
    str[k] = hexadecimalnum[k];
 }

 m = 0;
 j = l-1;
 // Flip the string because it is written backwards.
 while(m <j) {
    temp = str[m];
    str[m] = str[j];
    str[j] = temp;
    m++;
    j--;
 }
 printf("\n%s\n", str);

 return 0;

【问题讨论】:

  • 你在哪里终止字符串?您在字符串末尾添加了\0
  • 您忘记了 char 字符串实际上称为 null-terminated 字节字符串。 null-terminated 位很重要。
  • 另外,请不要使用magic numbers。如果通过例如55 你的意思是 ASCII 字符 '7' 然后 say 所以。另请注意,除了 C 规范没有强制要求的 ASCII 以外,不能保证您转换为字母。

标签: c


【解决方案1】:

在 while 循环之后添加 hexadecimalnum[l] = 0;。你需要终止字符串

【讨论】:

  • 这太离谱了!我个人认为'\0' 是一种混淆(使用八进制表示法指定的字符常量),尤其是在C 中,无论如何它都是int 类型。
  • 在第一个while循环之后添加那行代码?我在第一次之后尝试过,似乎没有任何改变......另外,你的意思是放小写 L 还是 1?
  • 第二个for也太短了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多