在C中重新分配字符串值

时间:2016-11-14 04:20:25

标签: c arrays string

所以我是C学生的第一年,我正在开展一个项目,我们必须在用户输入的给定基础上创建一个时间表。我几乎完全完成了它,但是我无法从表中删除前导零。

这就是简单的基本10表的样子。

andrew@andrew-VirtualBox ~/cs211/project1 $ ./timesTable 10

   |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |     
---|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|  
 0 |  00 |  00 |  00 |  00 |  00 |  00 |  00 |  00 |  00 |  00 |  
 1 |  00 |  01 |  02 |  03 |  04 |  05 |  06 |  07 |  08 |  09 |  
 2 |  00 |  02 |  04 |  06 |  08 |  10 |  12 |  14 |  16 |  18 |  
 3 |  00 |  03 |  06 |  09 |  12 |  15 |  18 |  21 |  24 |  27 |  
 4 |  00 |  04 |  08 |  12 |  16 |  20 |  24 |  28 |  32 |  36 |  
 5 |  00 |  05 |  10 |  15 |  20 |  25 |  30 |  35 |  40 |  45 |  
 6 |  00 |  06 |  12 |  18 |  24 |  30 |  36 |  42 |  48 |  54 |  
 7 |  00 |  07 |  14 |  21 |  28 |  35 |  42 |  49 |  56 |  63 |  
 8 |  00 |  08 |  16 |  24 |  32 |  40 |  48 |  56 |  64 |  72 |  
 9 |  00 |  09 |  18 |  27 |  36 |  45 |  54 |  63 |  72 |  81 |  
---|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|

我想从每个数字中删除前导零,但我很难让它工作。这是功能代码的样子。

char * toHex(int n, int q){

    static char hexNumber[4] = {0x00};
    char digits[16]={ '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

    unsigned int un = q;


    int i;

    for(i=1; i>=0; i--){
        hexNumber[i] = digits[un%n];
        un=un/n;        
    }
    if(strcmp(hexNumber, "0") == 0){
        hexNumber = " ";
    }   
    return hexNumber; 
}

使用我的逻辑,我正在尝试将hexNumber字符串重新分配给一个空的“”字符串,这样就不会出现零,但是我收到了错误:

timesTable.c: In function ‘toHex’:
timesTable.c:68:13: error: incompatible types when assigning to type ‘char[4]’ from type ‘char *’
   hexNumber = " ";

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您无法重新指定char[]类型,也无法修改const char[]。所以你必须这样做:

  • char hexNumber[4] = {0x00};

当你想分配时:

  • memcpy(hexNumber, " ", 2)(如果您已导入strings.h)
  • hexNumber[0] = ' '; hexNumber[1] = '\0';(如果您不想导入任何内容)

编辑:以上修复了错误。为了使您的程序正确,可能这就是您要用{<1}}代码替换

if(strcmp...

这将从字符串的开头检查0个字符,用空格字符替换它们,直到它达到非0字符。

如果您在堆栈中将其定义为数组,则也无法返回for (i = 0; i < 3; i++) { if (hexNumber[i] == '0') { hexNumber[i] = ' '; } else { break; } } ,而是hexNumber然后char* hexNumber = malloc(4);(确保您memset(hexNumber, '\0', 4)最佳)。这会在而不是堆栈上分配它。无论调用此函数最终需要import <strings.h>结果,否则您将有内存泄漏。或者,您可以使此函数接受free作为输入,并使调用者按需要分配它,这是处理字符串的许多C库函数所做的事情。

相关问题