如何在函数中操作字符数组(字符串)的指针,该指针在C / C ++中作为参数传递
how to manipulate a pointer of char array (string) inside a function where it is passed as a parameter in c / c++
你好,我是C语言的新手。 基本上,我正在尝试将 char array(string( 的指针传递给一个函数,在该函数中,我想在该数组的最后添加一个字符。 这是我尝试运行的代码。
所以我所说的函数是代码中的函数 1。指针线是我试图操纵的一条。我正在尝试使用方法追加在函数 1 内的行中添加一个字符。我也尝试了其他几种方法,但没有一种真正奏效。
如果有人可以向我展示如何正确执行此操作,那将非常有帮助。
#include <stdio.h>
#include <string.h>
char* function1(char* );
void append(char* , char );
int main(int argc, char const *argv[])
{
/* code */
function1("each line ends with : ");
return 0;
}
char* function1(char* line)
{
int pos = 0;
char* longest = "";
printf("so far working!n");
append(line, '$');
// here during append something happens and all it tells is segmentation fault core dumped
printf("not anymore.n");
return longest;
}
void append(char* s, char c)
{
s[strlen(s)] = c;
s[strlen(s)+1] = ' ';
}
为字符串分配足够的空间 - 当您声明字符串时,您说"它将不超过 n 个字节长"(包括终止' '
(。在内存中写入不属于字符串的字节将导致您看到的错误。
当你使用C时,没有通用的解决方案 - 在你的例子中,你从一个常量字符串开始(用"each line ends with: "
定义(,编译器只分配那么多空间。如果您认为可能需要更多空间,可以执行以下操作:
char mySpace[101]; // allocates 101 bytes : 100 characters + terminating ' '
strncpy(mySpace, "each line ends with: ", 100); / copy at most 100 bytes
现在,您可以将mySpace
的长度增加一个字符(与原始字符串不同,原始字符串由于您创建它的方式而是一个常量,只要您保持在为其分配的内存限制范围内,您就可以对副本执行所需的操作(:
int length;
length = strlen(mySpace);
mySpace[length] = '$';
mySpace[length+1] = ' ';
这有意义吗?
编辑 刚刚意识到另一个问题:
在代码片段中
s[strlen(s)] = c;
s[strlen(s)+1] = ' ';
在第一行中,您覆盖字符串的终止' '
字符:当您在第二行中调用strlen
时,该函数会尝试找到行尾字符(不再存在(,然后它一直跑到远处,一直到分段错误(这大致意味着"程序最终试图访问不属于它的内存"(。当我编写代码片段时,我本能地以正确的方式完成了 - 然后我再次查看您的代码,发现问题盯着我的脸。
当你在C "like this"
中声明一个字符串时,你实际上没有得到一个char*
。 你得到一个const char*
(嗯,不是技术上的,但它通常在只读内存中(。 切勿尝试修改在字符串文本中声明的char*
。
- 使用指向成员的指针将成员函数作为参数传递
- 修改函数中的指针(将另一个指针作为参数传递)
- 将成员函数指针作为参数传递给模板方法
- 使用引用与指针将数组作为参数传递
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 将函数指针数组中的函数指针作为模板参数传递
- 为什么或在什么情况下,你会将参数作为C++中的引用(或指针)传递给函数?
- 无法将指向类的成员函数的函数指针作为参数传递给同一类的另一个成员函数
- 如何将指针变量作为引用参数传递?
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- Qt5 - 如何将"QList<T> *"指针作为信号参数传递,并在完成后将其删除?
- C++将指向成员的指针作为模板参数传递
- 通过引用函数传递指针参数是什么意思?
- C++ 将派生类的成员函数指针作为参数传递时选择了错误的模板专用化
- 将函数指针作为函数参数传递的目的
- 将派生类作为参数传递给方法,该方法是具有智能指针的基类
- 将指针参数传递给双指针参数
- 解析结构并作为指针参数传递
- Qt中的2D游戏:初始化怪物并将动态分配的数组作为指针参数传递