我需要将 int 转换为字符串,但在负数和零中遇到问题

G0r*_*do1 0 c

代码应该从用户那里获取一个整数并将其转换为字符串,字符串中的第一个位置需要是数字的类型(低于零 - 高于零 + 和零,简单的没有)

#define GIVE_ME_THE_RIGHT_ARRAY_SIZE 2
#define MAX_INT_LENGTH_IN_C 10
char numberType(int number);

int  main(void)
{
    int number=0;
    char string[MAX_INT_LENGTH_IN_C]={0};
    char memoryString[MAX_INT_LENGTH_IN_C]={0};
    printf("Enter num: ");
    scanf("%d",&number);
    if(number>0){
    string[0]='+';
    }
    sprintf(memoryString,"%d",number);
    for(int i=0;memoryString[i]!=0;i++ )
    {
        string[i+1]=memoryString[i];
    }
    printf("string: %s length: %d",string,strlen(string));
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ica 5

没有必要使用所有循环和多个数组来确保+/-数字输出为字符串之前。sprintf提供'+'可以与转换说明符一起包含的标志以放置+/-在整数转换之前,例如

    sprintf (memoryString, "%+d", number);
Run Code Online (Sandbox Code Playgroud)

此外,除非您检查 return ,否则您无法正确使用任何输入函数。将这些部分放在一起,并为(例如)提供适当的转换说明符,您的代码简化为:size_t"%zu"

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

#define MAX_INT_LENGTH_IN_C 12

int  main(void)
{
    int number=0;
    char memoryString[MAX_INT_LENGTH_IN_C] = "";

    printf ("Enter num: ");
    if (scanf("%d",&number) != 1) {
        fputs ("error: invalid integer input.\n", stderr);
        return 1;
    }

    sprintf (memoryString, "%+d", number);

    printf ("memoryString: %s length: %zu\n",
            memoryString, strlen(memoryString));
}
Run Code Online (Sandbox Code Playgroud)

注:如在评论中提到,你必须#define MAX_INT_LENGTH_IN_C 12考虑到最大的整数值,例如-2147483648+/-,并提供余地'\0'末)

示例使用/输出

$ ./bin/memorystring
Enter num: 432198
memoryString: +432198 length: 7

$ ./bin/memorystring
Enter num: -432198
memoryString: -432198 length: 7
Run Code Online (Sandbox Code Playgroud)

仔细检查一下,如果您有其他问题,请告诉我。