![](/img/trans.png)
[英]in C the correct way to test nth character == "x" in a string passed to a function
[英]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.