繁体   English   中英

从字符串中返回第 n 个字符的函数

[英]A function that returns nth character from a string

我正在尝试从字符串中获取第 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。 我不确定这里出了什么问题。

你混淆了字符串和字符。 你可能想要这个:

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

char test(char input[], int position){
   return input[position];
}

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

这将打印

d

这非常简单,您实际上并不需要一个函数。 通常你有一个指向字符串或字符数组的指针,你可以像这样选择第 n 个字符:

char sometext[] = "abcdefghi\n";
...
char k = sometext[3];

您可能应该只返回一个char ,如其他答案中所示。

但是,如果您真的需要返回char * ,那么您应该这样做。

您只需要分配 2 个字符——一个用于您要返回的字符,另一个用于尾随的空字节。

您需要将字符复制到分配的内存中,而不是重新分配指针变量。

char *test(char input[],int position){
    char *result= malloc(2);
    result[0] = input[position];
    result[1] = '\0';
    return result;
}

调用者应在打印后释放内存。

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

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

功能

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

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

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

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

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

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

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

此外,由于传递的字符串未在函数内更改,因此应使用限定符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 );

如果要从第 n 个位置复制字符串:

char *copyFronNthPosiztion(const char *input, size_t position)
{
    size_t len = strlen(input);
    char *result = NULL;
    if(position < len)
    {
        result = malloc(len - position + 1);
        strcpy(result, input + position);
    }
    return result;
}

如果你想有第 n 个字符,你确实需要任何功能。 只需使用第 n 个索引。

如果你想要一个单一的字符字符串:

#define NTH(str, pos)   ((char[]){(str)[pos], 0})

    k=NTH("abcdefghi\n",3);
    printf("%s",k);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM