2 qq 32742637 qq_32742637 于 2016.03.21 12:33 提问

C语言问题,求大神指点迷津

#include
#include
void main()
{
char *p;
p = (char *)malloc(sizeof(char));
char *px;
px = p;
p = "sajjjmmij";
printf("%s,%s", p, px);
system("pause");

}
px输出是乱码,为什么?就想用这种方式让两个指针指向同一片字符串地址

6个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.21 13:09
已采纳

注释都写在代码里了

 #include<iostream>
using namespace std;
void main()
{
    char *p;
    p = (char *)malloc(10*sizeof(char));//你之前的只申请了一个字符的空间,不够放
    char *px;
    px = p;
    strcpy(p, "sajjjmmij");//这里要用strcpy,否则的话你的p指针指向了新的一个字符串(位于常量存储区)
    //p = "sajjjmmij";     //而你的px指针还指着原来malloc的空间,输出出来是垃圾值
    printf("%s,%s", p, px);
    free(px);//malloc以后记得free
    system("pause");
}
qq_32742637
qq_32742637 你懂我。。。。。。谢啦
2 年多之前 回复
ISEUWEI
ISEUWEI   2016.03.21 12:44

那你应该把px=p写在后面,懂?不懂再好好翻翻指针概念

qq_32742637
qq_32742637 我看了指针的概念,还是不太懂啊 ,拜托叔敖为说明一下,谢啦
2 年多之前 回复
bealing
bealing   Rxr 2016.03.21 13:35

问题虽小,可是包含的知识很重要。
开始时,malloc动态分配的,此时p指向堆空间
p = "sajjjmmij";,字符串常量存储在静态存储区,p指向的地址空间就发生了改变,
程序执行中,p指向的地址空间发生了变化:px仍然指向堆空间,可是里面没有数据,所以px输出是乱码
建议p = "sajjjmmij"; 改为strcpy(p,"sajjjmmij");

lxd1999
lxd1999   2016.03.21 13:04

p = (char *)malloc(sizeof(char));

申请一个字节空间能放下那么多字符?

使用完后
free(p);

Breaksoftware
Breaksoftware   2016.03.21 13:31

char px;
px = p;
改成
#define char
char_pointer;
char_pointer& px = p;
但是这时你的p = (char *)malloc(sizeof(char));就是无用的了。还是语法和本质问题没掌握好,好好推敲下。

kikilizhm
kikilizhm   2016.03.21 16:45

p的地址变化了 , 最初将p赋值给px的时候是malloc的内存,后来p指向你的新的字符了,
其实按照你的意图,应该使用 memcpy(p, "xxx",strlen("xxx")+1)

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
初学者,望路过的大神指点迷津。
5个数求最值 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述设计一个从5个整数中取最小数和最大数的程序 输入输入只有一组测试数据,为五个不大于1万的正整数 输出输出两个数,第一个为这五个数中的最小值,第二个为这五个数中的最大值,两个数字以空格格开。 样例输入 1 2 3 4 5 样例输出 1 5
C#运行不了,求大神指点迷津。。。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication132 {     public abstract class person     {         public abstract void
理解C语言——从小菜到大神的晋级之路(1)——引言:C语言的前世今生
C语言是现在应用最为广泛的编程语言之一,也是现在依然流行的编程语言中历史最悠久的一种之一。在目前业界广泛使用的编程语言中,许多 种语言是以C为基础发展而来。在多类大学的工程类专业尤其是信息类专业的教学计划中,C语言也是极为重要的基础课之一。 而对于一名以编译型语言为主要开发工具的程序员来说,熟练掌握C语言的用法和理论也可以对其他编程语言获得更深的理解。因此,在这一系列教程中我们希望可以深入理解C语
C语言最大子段和问题(动态规划)
C语言最大子段和问题(动态规划)
众数问题的C语言
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。
数列问题求助!求大牛指点迷津
小弟尝试着做了一下网易2018春招笔试的小Q数列的题目,遇到了如下问题,首先贴下代码部分:import java.util.ArrayList; import java.util.List; public class ShuLie1 { // 构造数列 static List&amp;lt;Long&amp;gt; Num() { List&amp;lt;Long&amp;gt; list = new Array...
求高手指点迷津
 读了http://blog.csdn.net/qingang1983/archive/2005/07/08/417065.aspx这个下拉菜单很好,可为什么目标窗口无法实现呢?我定义了嵌入式框架,可无法实现在此框架中的连接,实在找不着目标窗口。改了go函数,也不行,真诚的希望能得到帮助,谢谢
问题求大神解答
求大神解答,还在加班
C语言最大的乘积问题
最大乘积 Time Limit: 3000ms, Memory Limit: 10000KB , Accepted: 3506, Total Submissions: 6137 Description 输入n个元素组成的序列S,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正数,输出-1表示无解。1≤n≤18,-10≤Si≤10。 Input 第1行输入n,整数 第2行n
C语言智力拼图问题,请求大神!
(1)问题描述 设有12个平面图形如图1所示。每个图形的形状互不相同,但它们都是由5个大小相同的正方形组成。图1中这12个图形拼接成一个6×10的矩形。试设计一个算法,计算出用这12个图形拼接成给定矩形的拼接方案(每个图形可旋转或翻转后进行拼接,12个图形中每个图形恰好使用1次)。 (2)输入:由文件input.txt给出输入数据。第1行有2个正整数m和n,表示给定的矩形是一个m×n矩形,且m