如何将两个字符转换成一个字符串?
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
。
我将以下字符串保存到名为 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
。