![](/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.