C从1读取带有FGET的字符串,并保持0可用于读取

C从1读取带有FGET的字符串,并保持0可用于读取,c,string,C,String,我正在用C编写一个函数,它从用户那里获取一个数字并将其转换成字符串,在字符串的开头加上-+或者如果0,则不加任何内容,只打印字符串的长度和字符串本身 假设我输入123,字符串将包含:“+”、“1”、“2”、“3”、“\0” 它将打印:数组长度为4,包含+123 使用减号时,它将打印相同的内容,开始时使用-123,使用0时,它不会打印任何内容0 这就是我写的代码: #define STRING_SIZE 100 int main () { int num; char sNum[S

我正在用C编写一个函数,它从用户那里获取一个数字并将其转换成字符串,在字符串的开头加上-+或者如果0,则不加任何内容,只打印字符串的长度和字符串本身

假设我输入123,字符串将包含:“+”、“1”、“2”、“3”、“\0” 它将打印:数组长度为4,包含+123 使用减号时,它将打印相同的内容,开始时使用-123,使用0时,它不会打印任何内容0

这就是我写的代码:

#define STRING_SIZE 100

int main ()
{
    int num;
    char sNum[STRING_SIZE] = {'\0'}, string[STRING_SIZE] = {'\0'};
    printf("%s", string);
    scanf("%d", &num);
    itoa(num, string, 10);

    if (num < 0) {
        sNum[0] = '-';
    }
    else if (num > 0) {
        sNum[0] = '+';
    }
    strncpy (sNum, string, STRING_SIZE);
    printf("\nThe string length is %d and contains the number: %s\n", strlen(sNum), sNum);

    system ("PAUSE");
    return 0;
}
这就是我输入123时的输出:

字符串长度为3,包含数字123

这将用符号覆盖原始值

请改用,但请确保sNum[1]='\0'

大概是这样的:

char sNum[STRING_SIZE + 1] = {'\0'}, string[STRING_SIZE] = {'\0'};

// ...

if (num != 0) {
    sNum[0] = (num < 0) ? '-' : '+';    
}
strcat(sNum, string);
这将用符号覆盖原始值

请改用,但请确保sNum[1]='\0'

大概是这样的:

char sNum[STRING_SIZE + 1] = {'\0'}, string[STRING_SIZE] = {'\0'};

// ...

if (num != 0) {
    sNum[0] = (num < 0) ? '-' : '+';    
}
strcat(sNum, string);

您不需要将其转换为字符串。请检查此项

#include <stdio.h>

int main(void)
{
    int value;
    int length;
    if (scanf("%d%n", &value, &length) != 1)
        return -1;
    if (value == 0)
        printf("The string length is `1' and contains the number `0'\n");
    else
        printf("The string length is `%d' and contains the number `%+d'\n",
            length, value);
    return 0;
}
说明:

scanf中的%n说明符以长度存储scanf读取的字符数。 printf+修饰符在正数前面加一个+,在负数前面加一个-。特殊值0单独处理。 始终检查scanf的返回值。
您不需要将其转换为字符串。请检查此项

#include <stdio.h>

int main(void)
{
    int value;
    int length;
    if (scanf("%d%n", &value, &length) != 1)
        return -1;
    if (value == 0)
        printf("The string length is `1' and contains the number `0'\n");
    else
        printf("The string length is `%d' and contains the number `%+d'\n",
            length, value);
    return 0;
}
说明:

scanf中的%n说明符以长度存储scanf读取的字符数。 printf+修饰符在正数前面加一个+,在负数前面加一个-。特殊值0单独处理。 始终检查scanf的返回值。
复制在sNum中设置的角色。您需要从sNum的第二个字符开始复制,即&sNum[1]。还要记住从字符串中少复制一个字符。还请记住,在某些情况下,将不会附加终止符

或者直接使用:


复制在sNum中设置的角色。您需要从sNum的第二个字符开始复制,即&sNum[1]。还要记住从字符串中少复制一个字符。还请记住,在某些情况下,将不会附加终止符

或者直接使用:

OP使用char sNum[STRING_SIZE]={'\0'}将sNum初始化为全零,因此sNum[1]=0;行不是必需的。OP使用char sNum[STRING_SIZE]={'\0'}将sNum初始化为全零,因此sNum[1]=0;不需要排队。