【发布时间】:2014-10-23 02:53:44
【问题描述】:
我正在编写一个似乎已经依赖于线路的程序
printf("%s", xStr);
删除此行,将其注释掉,或将其更改为
printf("%s\n", xStr);
会导致我的程序崩溃。是否有任何情况下删除该行会破坏程序?
编辑:完整代码如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
char *toString(int x){
char *tmp;
sprintf(tmp, "%d", x);
return tmp;
}
int valueOf(char c){
if(isalpha(c))
return c - 'A' + 10;
else
return c - '0';
}
char *to10(char *xStr, int initBase){
int tmp = 0, i;
for(i = 1; i <= strlen(xStr); i++){
tmp += valueOf(xStr[strlen(xStr) - i])*pow(initBase, i - 1);
}
return toString(tmp);
}
char **buildAnsArray(FILE *fp, int n){
int i;
char **ansArray = malloc(sizeof(char)*n);
for(i = 0; i < n; i++){
char *item = malloc(10*sizeof(char));
fscanf(fp, "%s", item);
ansArray[i] = item;
}
return ansArray;
};
char *baseConversion(char *xStr, int initBase, int finBase){
printf("%s", xStr);
if(initBase != 10){
xStr = to10(xStr, initBase);
}
int x = atoi(xStr), i = 0;
while(pow(finBase,i) < x){
i++;
}
char *tmp = malloc(sizeof(char)*i);
int max = i;
while(i > 0){
int divisor = pow(finBase, i - 1);
int quotient = x/divisor;
if(quotient > 9){
tmp[max - i] = 'A' + quotient - 10;
}
else{
tmp[max - i] = (char)(((int)'0')+quotient);
}
x -= quotient*divisor;
i--;
}
printf("%s\n", tmp);
return tmp;
}
char *pow2Converter(int x, int initBase, int finBase){
x = atoi(baseConversion(x, initBase, 2));
int chunkSize = log2(finBase);
int tmp = 0;
while(x > 0){
tmp += atoi(baseConversion(toString(x%(int)pow(10,chunkSize)), 2, finBase));
x /= pow(10,chunkSize);
}
return tmp;
}
int findAnswer(char **ansArray, char *xStr, int high, int low){
}
main(){
FILE *in;
int num, i;
in = fopen("data.txt", "r");
fscanf(in, "%d", &num);
char **ansArray = buildAnsArray(in, num);
for(i = 0; i < num; i++){
int initBase, finBase, ansPos;
char *xFin, *xInit = malloc(sizeof(char)*10);
fscanf(in, "%s %d %d", xInit, &initBase, &finBase);
xFin = baseConversion(xInit, initBase, finBase);
ansPos = findAnswer(ansArray, xFin, num - 1, 0);
//printf("%d\n", ansPos);
}
}
【问题讨论】:
-
请编辑您的问题并包含完整代码,一行不足以帮助我们调试
-
您需要了解更多关于指针和内存分配的知识。这么多错误。
-
我同意。我在 C 方面的唯一经验是 2 个月的计算机科学 1. 你会做哪些不同的事情?
-
除了@paxdiablo 的回答之外,还有其他一些:
fscanf(fp, "%s", item);、char *xFin, *xInit = malloc(sizeof(char)*10);。看看它们,要么是这些线条,要么是它们周围的线条。看看你能不能自己找出错误。