【发布时间】:2020-12-21 21:04:10
【问题描述】:
我正在将数组的反转“保存”到新数组中。 示例:
数组 A = abc
数组 B = cba
以下代码是我的解决方案。除非显式循环,否则新的反向 array B 不会打印。单个元素上的 fprint %s 和 fprint %c 都会打印空白。这是什么原因造成的?
注意:函数接受一个数字并首先转换为字符串。
int reverse(int x){
int len = int_length(x); //Functions works, gets the length
len++; //add room for \0
char *num = (char *)malloc(len * sizeof(char));
char *ans = (char *)malloc(len * sizeof(char));
snprintf(num, len, "%d", x); //Turn the numbers into a char array
printf("%s\n", num);
int i;
for(i = 0; i < len; i++) {
ans[i] = num[len-(i+1)];
}
for(i = 0; i < len; i++) {
printf("%c\n", ans[i]); //PRINTS FINE
}
printf("\n%c\n", num[0]);
printf("%c\n", ans[0]); //NOTHING PRINTS
printf("%s\n", ans); //NOTHING PRINTS
return 0;
}
【问题讨论】:
-
请注意,您可以使用
snprintf来确定创建字符串所需的实际大小。 -
最后,解决像您这样的问题的“标准”方法是使用 调试器 在监视变量及其值的同时逐句执行代码。
-
你正在增加 len 来解释 nul 终止符,现在 nul 终止符在混合中,并且通过将它变为空来破坏你的反转字符串,除非你逐个字符地打印它
-
char *num = (char *)malloc(len * sizeof(char));应该是:char *num =malloc(len + 1);对于C的转换是错误的(对于 ~C++), andsizeof(char)` 的定义总是 == 1。