簡體   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