首页 > 解决方案 > 从字符串中返回第 n 个字符的函数

问题描述

我正在尝试从字符串中获取第 n 个字符。但是,它从第 n 个字符开始向我返回字符串。

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

char *test(char input[],int position){

    char *result= malloc(sizeof(char)*100);
    result=&input[position];
    return result;
}

int main(){
    char *k;
    k=test("abcdefghi\n",3);
    printf("%s",k);
}

上面的代码返回 defghi 而不仅仅是 d。我不确定这里有什么问题。

标签: ccharprintfc-stringsfunction-definition

解决方案


我正在尝试从字符串中获取第 n 个字符。但是,它从第 n 个字符开始向我返回字符串。

功能

char *test(char input[],int position){

不返回字符。它返回一个指针。

此外,该函数存在内存泄漏,因为首先分配了内存并将其地址分配给指针result,然后重新分配指针

char *result= malloc(sizeof(char)*100);
result=&input[position];

所以分配的内存地址就丢失了。

除此之外,参数position的值可以超过传递的字符串的长度。因此该函数可以调用未定义的行为。

如果函数返回一个指向字符的指针,那么输出你需要的指向的字符 1) 取消引用指针和 2) 使用转换说明符%c而不是%s调用printf.

此外,由于传递的字符串没有在函数内更改,因此应使用 qualifier 声明相应的参数const

该函数可以通过以下方式声明和定义

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

char * test( const char input[], size_t position )
{
    char *result = NULL;

    if ( position <= strlen( input ) )
    {
        result = ( char * )( input + position );
    }

    return result;
}

主要是你应该写

char *k;

k = test( "abcdefghi\n", 3 );

if ( k != NULL ) printf( "%c\n", *k );

推荐阅读