c - 从字符串中返回第 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。我不确定这里有什么问题。
解决方案
我正在尝试从字符串中获取第 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 );
推荐阅读
- google-app-engine - 从另一个 API 访问谷歌机器学习 API
- python-3.x - 无法使用 python 在 Linux 服务器中创建文本文件
- google-cloud-platform - Google Cloud Functions 的单元测试
- php - Symfony 相关验证或验证组
- c# - 如何使用 C# 库为 Dialogflow 发送音频 - DetectIntent
- java - Android WebView 应用程序永远重新加载 url
- html - 为什么查询不会保存在 csv 文件中,而在 postgresql 控制台中看起来很正常
- elasticsearch - 设置 Elastic Search 单节点集群的问题
- json - 如何编写一个函数来检测和替换加载的 JSON 中的 url?
- bootstrap-4 - 主题 Bootstrap 和 Jhipster