繁体   English   中英

将char指针传递给另一个函数

[英]Passing a char pointer to another function

我已经研究了半天,无法弄清楚如何传递一个简单的char指针,以及如何修改函数中的值。 大多数解决方案都说修改功能以接受char **参数。

我有一个无法修改的功能。 我需要向其传递一个char指针,因为此函数将为我提供一个新的计算出的char值。 有人告诉我我可以传递一个指向char数组的指针,它可以工作,但是我不确定该怎么做。

将char指针作为参数传递给函数

我按照上面的帖子,提出了以下代码,但仍然无法正常工作。 当我将指针传递给char arr []时,它不会更改其值。 我的目标是传递一个char指针,并能够通过传递其引用在另一个函数中对其进行写入。 任何帮助表示赞赏。

enum STATUS {
    OK = 0,
    BAD = 1,
};

STATUS func1(char *pData)
{
    pData = "Hello World";

    cout << pData << endl;

    return OK;
}

int main()
{
    STATUS ret;
    char arr[] = "Example String";
    char* pArray = &arr[0];

    ret = func1(pArray);

    cout << arr << endl;
    cout << pArray << endl;


    getchar();

    return 0;
}

我有一个无法修改的功能。 我需要向其传递一个char指针,因为此函数将为我提供一个新的计算出的char值。 有人告诉我我可以传递一个指向char数组的指针,它可以工作,但是我不确定该怎么做。

那是不对的。 谁说过对您撒谎,或者他们对主题一无所知。


使用时

pData = "Hello World";

您正在修改pData指向的位置。 但是,该更改是该功能的局部功能。 它不会更改调用函数中的数据。 您可以使用std::strcpy进行更改以影响调用函数。

std::strcpy(pData, "Hello World");

您可以按引用传递指针并更改指针的值。 这将使更改对调用函数可见。

STATUS func1(char*& pData)
{
    pData = "Hello World";

    cout << pData << endl;

    return OK;
}

但是,这样做时, main arrpArray将有所不同。 arr将继续具有相同的值,而pArray将指向一个完全不同的值。

 STATUS func1(char *pData)
 {
     pData = "Hello World";
     cout << pData << endl;
     return OK;
 }

该函数正在执行浅表复制 (即,更改指针pData的值而不是其指向的内容)。 您需要将新字符串深层复制pData指针指向的内存中。

进行字符串深拷贝的传统方法是使用strcpy()库调用。 您也可以使用循环。

STATUS func1(char *pData)
{
  *(pData) = "H";
  *(pData+1) = "e";
  *(pData+2) = "l";
  *(pData+3) = "l";
  //... etc ...

  cout << pData << endl;

  return OK;
}

这将更改指针指向的内存,而不是指针本身。 使用其他答案中的函数可以更好地完成此操作,但这更为明确。 如果使用的IDE允许单步调试和查看内存,则可以查看内存更改中的各个字节。

如果初始内存缓冲区不够大,则可能导致指针溢出。

还值得一提的是,您的内存足够用于无法更改的功能吗? 您是否应该像这样分配内存:

char *ptr = new char[1000];
//etc....
if(ptr) delete ptr;

要创建(和删除)更大的未初始化的内存缓冲区?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM