用指针实现两个字符串连接

qq_41093250 2017-11-21 06:22:42
#include<stdio.h>
#include<string.h>
void main()
{
char *a="dsad";
char *b="dsdffff";
while(*a++);
while(*a++=*b++);
printf("%s",a);
}
这个函数哪里错了????
...全文
1536 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-12-06
  • 打赏
  • 举报
回复
引用 9 楼 qq_41093250 的回复:
[quote=引用 8 楼 cfjtaishan 的回复:]
#include<stdio.h>
#include<string.h>
int main()
{
    char a[32]="dsad";
    char *b="dsdffff";
    char *p = a;
    while(*p++)
        ;
    p--;   /*后退一个字符,指向a的'\0'*/
    while(*p++ = *b++)
        ;
    *p = 0;    /* 添加'\0'*/

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

    return 0;
}
三个问题: 1. 字符串常量不能修改,所以*a++= *b++;就会对a修改; 2. 即使a可以修改,那么*a++ = *b++;指针a已经指向了字符串的末尾,直接输出a不能将连接后的字符串输出; 3. 字符串的'\0'没有赋值给a;
你好,为什么不能printf("%s\n",p);[/quote] 道理是一样的,因为p指向了字符串的末尾位置。
qq_41093250 2017-12-05
  • 打赏
  • 举报
回复
引用 8 楼 cfjtaishan 的回复:
#include<stdio.h>
#include<string.h>
int main()
{
    char a[32]="dsad";
    char *b="dsdffff";
    char *p = a;
    while(*p++)
        ;
    p--;   /*后退一个字符,指向a的'\0'*/
    while(*p++ = *b++)
        ;
    *p = 0;    /* 添加'\0'*/

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

    return 0;
}
三个问题: 1. 字符串常量不能修改,所以*a++= *b++;就会对a修改; 2. 即使a可以修改,那么*a++ = *b++;指针a已经指向了字符串的末尾,直接输出a不能将连接后的字符串输出; 3. 字符串的'\0'没有赋值给a;
你好,为什么不能printf("%s\n",p);
paschen 2017-11-22
  • 打赏
  • 举报
回复
引用 4 楼 qq_41093250 的回复:
引用 1 楼 sdghchj 的回复:
你的指针a指向了字面量字符串,那是不可修改的常量,不能拼接
能不能详细讲讲指针指向字符串为什么不可修改呢,拜托大神
因为这个指针指向的是常量区的字符串,之所以不需要const char*是历史原因,楼主记住就行
自信男孩 2017-11-22
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>
int main()
{
    char a[32]="dsad";
    char *b="dsdffff";
    char *p = a;
    while(*p++)
        ;
    p--;   /*后退一个字符,指向a的'\0'*/
    while(*p++ = *b++)
        ;
    *p = 0;    /* 添加'\0'*/

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

    return 0;
}
三个问题: 1. 字符串常量不能修改,所以*a++= *b++;就会对a修改; 2. 即使a可以修改,那么*a++ = *b++;指针a已经指向了字符串的末尾,直接输出a不能将连接后的字符串输出; 3. 字符串的'\0'没有赋值给a;
大米粥哥哥 2017-11-21
  • 打赏
  • 举报
回复
百度 字符串常量为什么不能修改 建议 用char数组 字符串变量
qq_41093250 2017-11-21
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
你的指针是指向常量区的字符串,不能修改,否则程序会崩,如果你要修改,用字符数组的形式保存,写成:char a[100]="dsad";
能不能详细讲讲指针指向字符串为什么不可修改呢
qq_41093250 2017-11-21
  • 打赏
  • 举报
回复
引用 1 楼 sdghchj 的回复:
你的指针a指向了字面量字符串,那是不可修改的常量,不能拼接
能不能详细讲讲指针指向字符串为什么不可修改呢,拜托大神
paschen 2017-11-21
  • 打赏
  • 举报
回复
你的指针是指向常量区的字符串,不能修改,否则程序会崩,如果你要修改,用字符数组的形式保存,写成:char a[100]="dsad";
CT8100 2017-11-21
  • 打赏
  • 举报
回复
把改成char 数组、然后用指针指向数组,应该就可以了
sdghchj 2017-11-21
  • 打赏
  • 举报
回复
你的指针a指向了字面量字符串,那是不可修改的常量,不能拼接

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧