Я пишу программу, которая, кажется, стали зависимыми от линиисбой программы, если строка не печатается
printf("%s", xStr);
Удаление этой линии, комментируя его, или изменить его на
printf("%s\n", xStr);
приведет к сбою моей программы. Есть ли какие-либо обстоятельства, когда-либо, при которых удаление этой строки должно нарушать программу?
Edit: Полный код ниже
#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);
}
}
Пожалуйста, отредактируйте ваш вопрос и включите полный код, одной строки недостаточно, чтобы помочь нам отладить – Parker
Вам нужно больше узнать о указателях и распределении памяти. Так много ошибок. –
Согласен. Мой единственный опыт в C - это 2 месяца компьютерных наук 1. Что бы вы сделали по-другому? –