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