我正在写一个程序,看起来似乎越来越依赖

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);

    }

}

最佳答案

你所拥有的是一个海森氏病,当你试图看着它时它就会消失或移动:-)

通常是由于执行一些 undefined 的操作引起的,例如:

char *toString(int x){
    char *tmp;
    sprintf(tmp, "%d", x);
    return tmp;
}

不要那样做您正在创建一个可以指向任何地方的指针,然后向其中写入信息。

您甚至无法使用创建数组的悠久技术,因为您将其返回,并且在超出范围后无疑会使用它。

如果您确定一次不会多次调用它(例如使用线程),则可以将其作为快速解决方案:
char *toString (int x) {
    static char tmp[30];
    sprintf(tmp, "%d", x);
    return tmp;
}

关于c - 除非打印字符串,否则程序崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26520556/

10-11 22:28
查看更多