C 中的子字符串函数
Substring function in C
我正在尝试在 C 中创建子字符串函数,这非常合乎逻辑且简单,但出于某种原因它会打印出符号。我在网上查了很多遍,对比别人的功能,但我找不到我的代码不起作用的确切原因。
#define MAX 50
char* substring(char string[], int indexBeginning, int indexEnd) {
const char *result[MAX];
int n= 0;
for (int i = indexBeginning; i <= indexEnd; i++) {
result[n++] = string[i];
}
result[n] = '[=10=]';
return result;
}
这个数组声明
const char *result[MAX];
不正确。你的意思好像是
char result[MAX];
但在任何情况下都不能使用数组作为返回表达式
return result;
因为数组是函数的局部对象,退出函数后不会存活
也是这个循环
for (int i = indexBeginning; i <= indexEnd; i++) {
result[n++] = string[i];
}
不安全,因为没有检查指定索引对源字符串是否有效。
并且函数本身应该声明为
char * substring( const char string[], size_t pos, size_t n );
函数可以按照下面的演示程序所示的方式定义。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * substring( const char s[], size_t pos, size_t n )
{
char *result = NULL;
size_t length = strlen( s );
if ( pos < length )
{
n = n <= length - pos ? n : length - pos;
result = malloc( n + 1 );
if ( result != NULL )
{
result[n] = '[=15=]';
memcpy( result, s + pos, n );
}
}
return result;
}
int main(void)
{
const char *s = "Hello World!";
char *word = substring( s, 0, 5 );
if ( word ) puts( word );
free( word );
word = substring( s, 6, 5 );
if ( word ) puts( word );
free( word );
return 0;
}
程序输出为
Hello
World
我正在尝试在 C 中创建子字符串函数,这非常合乎逻辑且简单,但出于某种原因它会打印出符号。我在网上查了很多遍,对比别人的功能,但我找不到我的代码不起作用的确切原因。
#define MAX 50
char* substring(char string[], int indexBeginning, int indexEnd) {
const char *result[MAX];
int n= 0;
for (int i = indexBeginning; i <= indexEnd; i++) {
result[n++] = string[i];
}
result[n] = '[=10=]';
return result;
}
这个数组声明
const char *result[MAX];
不正确。你的意思好像是
char result[MAX];
但在任何情况下都不能使用数组作为返回表达式
return result;
因为数组是函数的局部对象,退出函数后不会存活
也是这个循环
for (int i = indexBeginning; i <= indexEnd; i++) {
result[n++] = string[i];
}
不安全,因为没有检查指定索引对源字符串是否有效。
并且函数本身应该声明为
char * substring( const char string[], size_t pos, size_t n );
函数可以按照下面的演示程序所示的方式定义。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * substring( const char s[], size_t pos, size_t n )
{
char *result = NULL;
size_t length = strlen( s );
if ( pos < length )
{
n = n <= length - pos ? n : length - pos;
result = malloc( n + 1 );
if ( result != NULL )
{
result[n] = '[=15=]';
memcpy( result, s + pos, n );
}
}
return result;
}
int main(void)
{
const char *s = "Hello World!";
char *word = substring( s, 0, 5 );
if ( word ) puts( word );
free( word );
word = substring( s, 6, 5 );
if ( word ) puts( word );
free( word );
return 0;
}
程序输出为
Hello
World