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

问题描述

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输出是乱码,为什么?就想用这种方式让两个指针指向同一片字符串地址

解决方案

注释都写在代码里了

 #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");
}

解决方案二:

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

解决方案三:

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

解决方案四:

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

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

使用完后
free(p);

解决方案五:

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

解决方案六:

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

时间: 2024-11-03 00:30:37

c语言-C语言问题,求大神指点迷津的相关文章

c语言基础问题,求大神解答

问题描述 c语言基础问题,求大神解答 输入10个整数,使其各数顺序向后移动m个位置,如1.2.3.4.5.6.7.8.9.10移动后为7.8.9.10.1.2.3.4.5.6 解决方案 用循环,对1--8的数据向后移,0,9号数据单独考虑 解决方案二: 百度上有个算法,你试试效率怎么样 void Reverse(int *arr, int b, int e) { for(; b < e; b++, e--) { int temp = arr[e]; arr[e] = arr[b]; arr[b]

printf-c语言 素数求和问题 求大神看看我代码的问题

问题描述 c语言 素数求和问题 求大神看看我代码的问题 http://acm.nyist.net/JudgeOnline/problem.php?pid=22&rec=rec 我的代码是: #include #include int main() { int N,M,sum,i,j,a[10],flag; double s; scanf("%d",&M); while(M--) { scanf("%d",&N); for(i=0;i<N

vc-c语言的疑惑,求大神讲解

问题描述 c语言的疑惑,求大神讲解 在vc环境下conio.h不是没有这些函数gotoxy(),clrscr()那么它在vc环境下到底有什么用 解决方案 这些函数是TurboC特有的,VC没有,VC使用gdi去作图. 解决方案二: 头文件中有其它一些定义,不过这都是一些控制台相关的,用的应该很少. 解决方案三: VC有自己的图形库,你要强行用别的话,弄起来比较麻烦 解决方案四: 要做图形界面,可以用VC的MFC来做啊 解决方案五: 屏蔽,试下,就可以知道结果了!~ 解决方案六: 那个清屏函数应该

调用函数-一道C语言的题目,求大神解答

问题描述 一道C语言的题目,求大神解答 输入一个正整数,逐位分割该数的每一位数字,求由数字所构成的最大整数.例如:输入624891,得到最大整数:986421.要求定义和调用函数计算并返回一个x可构成的最大整数. 解决方案 #include #define N 20 int fun(int n) { int x,t,s[N]={0},i,j,len; for(len=0;x!=0;len++) { x=n/10; s[len]=n%10; n=x; } for(i=0;i<len-1;i++)

c语言问题-关于c语言的问题,求大神解答

问题描述 关于c语言的问题,求大神解答 为什么输出是1#3#21# 解决方案 这么简单..你自己循环3遍就看出来了.你认为该是什么结果?

c语言-C语言小问题,求大神。

问题描述 C语言小问题,求大神. 题目:有三串字符,A,B,C.如果A中字符跟B中相同,则把C中字符赋给A. #include"stdio.h" #define N 100 void replace(char *a,char *b,char *c) { char *p; p=a; while(*a!='') //尤其注意判断等于是 == 号 { if(*a==*b) {*a=*c;printf("%c",*a);} a++; b++; c++; } a=p; pri

c语言-C语言题目,跪求大神给个代码,实在不会啊

问题描述 C语言题目,跪求大神给个代码,实在不会啊 描述 大家都知道二进制数只含有0和1,那么问题来了,告诉你一个区间[L,R),L,R都是int范围类的正整数.且L < R,在这个区间里的所有数转化为二进制后所有位数之和最大的数是?(如果有多个输出值最小的) 输入 多组测试数据,每组测试数据仅含有两个整数L,R. 输出 一个整数,表示在以上区间内转化成二进制后所有位数之和最大的数 样例输入 4 7 样例输出 5 解决方案 #include <stdio.h> int cal(int n

C语言小算法,求大神支招

问题描述 C语言小算法,求大神支招 输入一串int类型的数组,要求出某一截数字串加起来最大,并打印数字串. 解决方案 http://www.cnblogs.com/zhousir1991/archive/2011/05/26/2058975.html 解决方案二: 用dp来做http://blog.csdn.net/someday7_toi/article/details/7852448

malloc-c语言指针问题,求大神,新手。

问题描述 c语言指针问题,求大神,新手. #include #include #include struct Student { int age; char name[100]; float score; }; void Ininformation(int * IP_len, struct Student * IP_arr) { int i; for (i = 0; i < *IP_len; ++i) { printf("请输入%d个学生信息: ", *IP_len); prin