如何将两个字符转换成一个字符串?

How to convert two characters into a string?

我将以下字符串保存到名为 buffer:

的字符数组中
{app_id:9401}

我想得到两个整数:94和01。我想把buffer[8]buffer[9]转换成第一个整数(94)和buffer[10]buffer[11] 转换为第二个整数 (1)。我正在尝试这样做,但出现分段错误。为什么?

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

int main( void )
{
    char buffer[] = "{app_id:9401}";

    printf("First number:%c%c. Second Number: %c%c\n", buffer[8], buffer[9], buffer[10], buffer[11]);

    char first_number[10] = "";
    strcat(first_number, buffer[8]);
    strcat(first_number, buffer[9]);

    int x = atoi(first_number);
    printf("%d\n", x);
}

这是一种方法,例如。从字符串中扫描两个整数,每个整数的最大长度为 2.

#include <stdio.h>

int main(void)
{
    char buffer[] = "{app_id:9401}";
    int x, y;
    if(sscanf(buffer + 8, "%2d%2d", &x, &y) == 2)
        printf ("x=%d y=%d\n", x, y);
    return 0;
}

输出:

x=94 y=1

如果不知道数字在字符串中的什么位置,可以用

找冒号
char *cptr = strchr(buffer, ':');

[...] but I obtain segmentation fault. Why?

函数strcat要求两个函数参数都是指向字符串的指针。但是,您没有提供指针作为函数参数。相反,您传递的是单个字符的值。任何好的编译器都应该警告您这一点,前提是您启用了警告。我建议您确保始终启用它们。有关更多信息,请参阅此问题:

这个无效的函数参数可能是您的分段错误的原因。

使用函数 strcat 可能不是您想要的,因为您想要将单个字符连接到字符串,而不是将字符串连接到字符串。 C 标准库不提供执行此操作的函数。但是,您可以轻松地自己实现这样的功能:

void concatentate_string_with_character( char *dest, char c )
{
    //calculate length of destination string
    size_t length = strlen( dest );

    //overwrite terminating null character with new character
    dest[length] = c;

    //write new terminating null character
    dest[length+1] = '[=10=]';
}

如果您在代码中将函数 strcat 替换为 concatentate_string_with_character,那么它将起作用:

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

void concatentate_string_with_character( char *dest, char c )
{
    //calculate length of destination string
    size_t length = strlen( dest );

    //overwrite terminating null character with new character
    dest[length] = c;

    //write new terminating null character
    dest[length+1] = '[=11=]';
}

int main( void )
{
    char buffer[] = "{app_id:9401}";

    char first_number[10] = "";
    concatentate_string_with_character( first_number, buffer[8] );
    concatentate_string_with_character( first_number, buffer[9] );
    int x = atoi( first_number );
    printf( "%d\n", x );
}

这个程序有正确的输出 94

但是,与其为此使用单独的函数,不如自己简单地定义 first_number 的三个元素可能更容易:

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

int main( void )
{
    char buffer[] = "{app_id:9401}";

    char first_number[] = { buffer[8], buffer[9], '[=12=]' };

    int x = atoi( first_number );
    printf( "%d\n", x );
}

这个程序也有正确的输出 94