首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nul终止指针

nul终止指针
EN

Stack Overflow用户
提问于 2012-04-25 18:07:51
回答 3查看 64关注 0票数 0

c89 gcc (GCC) 4.6.3

你好,

我在*search =‘\0’上得到一个堆栈转储;我认为可以nul终止一个字符串。

代码语言:javascript
复制
char *ptr_name = "hello@home";
char *search = ptr_name;

search = strchr(ptr_name, '@');
search++;
*search = '\0';

非常感谢您的建议,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-25 18:13:40

char *ptr_name = "hello@home";创建一个字符串常量,该常量不能修改。

要获得预期的结果,您需要使用数组char arr_name[] = "hello@home";"hello@home"分配内存-或者在运行时使用malloc动态分配内存。

您的程序应该如下所示:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

int main()
{
    char arr_name[] = "hello@home";
    char *search = arr_name;

    printf("%s \n", arr_name);
    search = strchr(arr_name, '@');
    search++;
    *search = '\0';

    printf("%s \n", arr_name);

    return 0;
}

输出:

代码语言:javascript
复制
$ ./a.out 
hello@home 
hello@ 
$
票数 1
EN

Stack Overflow用户

发布于 2012-04-25 18:10:54

ptr_name指向只读区域中的字符串。

相反,请尝试:

代码语言:javascript
复制
char ptr_name[] = "hello@home"
票数 2
EN

Stack Overflow用户

发布于 2012-04-25 18:11:32

当它是一个文字常量时,你不能这样做。你可以把它strcpy()到一个堆栈或堆变量中,然后你就可以修改它了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10313510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档