将字符串转换为字符数组

时间:2018-03-15 20:18:12

标签: c arrays linux linker

我试图将用户输入的至少17个字符转换为数组。例如,用户的输入为25281582252,使用x = arr[1]5被分配给变量x。 我还没有成功。我在linux上获得"undefined reference to log10" gcc。这是我的代码

#include <stdio.h>
#include <math.h>

int main(){
    int x;

    printf("enter x");
    scanf("%d",x);
    int numOfDigits = log10(x) + 1;
    char* arr = calloc(numOfDigits, sizeof(char));
    for(int i=0;i<numOfDigits;i++,x/=10){
        arr[i] = x % 10;
    }

    printf("first num: %d",arr[0]);
    return 0;
}

提前致谢

1 个答案:

答案 0 :(得分:0)

  

我得到"undefined reference to log10"

您需要使用-lm将程序与数学库相关联。

但这只是一个开始。修复以下问题:

a)如果希望正确终止字符串,则为空字符串终止符分配额外字符。

b)scanf("%d",x);需要指向x

的指针

c)int变量无法存储17个数字,请使用long int

d)您无法将int存储到char array中,您的数字必须转换为ASCII字符。

f)你的算法以相反的顺序存储字符,你需要反转你的字符串

e)必须释放分配的内存。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

void reverse_in_place(char * str, size_t len) {
   size_t i, j;
   for (i = 0, j = len - 1; i < j ; i++, j--) {
        char a = str[i];
        char z = str[j];
        str[i] = z;
        str[j] = a;
   }
}

int main(void){
    long int x;
    int i;

    printf("enter x:\n");
    scanf("%ld",&x);

    int numOfDigits = (int) (log10(x) + 1);

    printf("numOfDigits =  %d\n", numOfDigits);

    char* arr = calloc(numOfDigits + 1, 1);

       for(i=0; i < numOfDigits; i++){
            arr[i] = (char) ((x % 10) + '0');
            printf(" %c", arr[i]);
            x /= 10;
    }

    reverse_in_place(arr,strlen(arr));        
    printf("\nFirst num is: %c in string %s",arr[0], arr);

    free(arr); 
    return 0;
}

输出:

enter x:                                                                                                                                    
451236789012345678                                                                                                                          
numOfDigits =  18                                                                                                                           
 8 7 6 5 4 3 2 1 0 9 8 7 6 3 2 1 5 4                                                                                                        
First num is: 4 in string 451236789012345678