C++ 字符串取值,取址,引用 例题

有如下程序段:

void GetMemeory(char *p)
{
    p = (char *)malloc(100);
}
void Test()
{
    char *str = NULL;
    GetMemeory(str);
    strcpy(str, "Thunder");
    strcat(str + 2, "Downloader");
    printf(str);
}

请问运行Test函数结果是:

A Thunder Downloader

B under Downloader

C Thunderownloader

D 程序崩溃

str为一个指针,但实际上为int类型,传入函数内部并不会发生任何改变(str是一个指针,在32位的机器上,它是一个32位的整数,存储一个内存地址的值)
GetMemory函数执行完成后,str仍然指向NULL,所以赋值时回奔溃
正确的做法应该使用双指针 或使用引用

按值传递,函数返回后,局部变量的值不会随着调用函数内部的实现—-改变而=改变。
按地址传递和按指针传递,才会改变局部变量的值。
这道题,GetMemory()是按照按值传递的,因而局部变量,不会因为函数内部 p = (char*)malloc(100);
的实现,而更改。返回主函数后, 仍然是 *str = NULL;。因而在改指针执行操作,会造成程序崩溃。
因为没有为它分配内存。

双指针方法:

链接:https://www.nowcoder.com/questionTerminal/681153b22f4d4622a7bf63cb6670aa23
来源:牛客网

void GetMemory(char **p){
    *p = (char *)malloc(100);
}

void Test(){
    char *str = NULL;
    GetMemory(&str);
    strcpy(str,"Thunder");
    strcat(str+2,"Downloader");
    printf(str);
}

引用方法:

void GetMemeory(char* &p)
{
    p = (char *)malloc(100);
}
void Test()
{
    char *str = NULL;
    GetMemeory(str);
    strcpy(str, "Thunder");
    strcat(str + 2, "Downloader");
    printf(str);
}

strcat用于将两个char类型链接的函数。
函数原型:extern char *strcat(char *dest,char *src);
参数:
dest 目标数组指针
src 源字符串指针
返回值:返回指向dest的指针
函数功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的’\0’)并添加’\0’。

printf(str);

运行结果:

ThunderDownloader

若最后打印信息为:

printf(str+2)

运行结果:

underDownloader

cout对象认为char的地址是字符串的地址,因此一直输出知道遇到空字符结束。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C语言中,当我们需要使用字符串相关的函数和操作时,需要引用头文件<stdio.h>或<string.h>。其中的<stdio.h>包含了一些输入输出操作的函数,而<string.h>则包含了一些字符串操作的函数。 在引用这两个头文件之前,我们可以使用一些简短的定义来声明字符串。例如,我们可以使用字符数组来定义一个字符串,如: ```c char str[100]; // 定义一个大小为100的字符数组,用来存储字符串 ``` 然后,在我们需要使用字符串函数或操作时,我们可以引用头文件<stdio.h>或<string.h>。例如,如果我们需要使用输入输出函数,我们可以引用<stdio.h>头文件,并使用其中的函数,如: ```c #include <stdio.h> int main() { char str[100]; printf("请输入一个字符串:"); scanf("%s", str); printf("您输入的字符串是:%s\n", str); return 0; } ``` 如果我们需要使用一些字符串操作函数,比如字符串比较函数strcmp(),我们可以引用<string.h>头文件,并使用其中的函数,如: ```c #include <stdio.h> #include <string.h> int main() { char str1[100] = "Hello"; char str2[100] = "World"; int result = strcmp(str1, str2); if (result == 0) { printf("两个字符串相等\n"); } else { printf("两个字符串不相等\n"); } return 0; } ``` 总之,在C语言中,当我们想要使用字符串相关的函数和操作时,需要引用对应的头文件,以便我们可以使用其中的函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值