一个c语言指针输出字符串的问题?

#include<stdio.h>
int main()
{
char *ch="asfsdfasd",**t;
*t=ch;
printf("%s",*t);
return 0;
}
写的代码是这样,必须用二级指针做,我预期是能打印出ch字符串,能编译但是运行没结果。ch存放字符串的地址,然后赋值给*t,最后输出。想知道为什么这么写不行。谢谢大家!

不是*t=ch;而是t=&ch; t还是个野指针,直接操作*t是非常不安全的
#include<stdio.h>
int main()
{
char *ch="asfsdfasd",**t;
t=&ch; //不是*t=ch;而是t=&ch;
printf("%s",*t);
return 0;
}
如果一定要*t=ch,就要先给t分配空间:
#include<stdio.h>
#include <malloc.h>
int main()
{
char *ch = "asfsdfasd", **t;
t = (char**)malloc(sizeof(char*)); //给t分配一个char*的空间
*t = ch;
printf("%s", *t);
free(t);
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-03-28
类型不匹配,定义的是char指针,赋值是char实体
第2个回答  2020-12-28

C语言字符串的学习,输入指定字符串,并且计算字符串的位数

c语言中如何借用指针输出字符串?
1、使用printf 函数进行输出,其使用的格式转换符为%s,如 char *str = "test";\/\/指针指向一个字符串 printf ("%s\\n", str);\/\/输出str指向的字符串 2、使用puts函数进行输出,如 char *str = "test";puts(str);\/\/输出str指向的字符串,会自动多输出一个换行 3、使用自定义函数进行输出,...

C语言中变量指针输出问题
值 地址 t 0030F8B0 h 0030F8B1 i 0030F8B2 ... ...此时有char *ps="this is a book"; 由于ps是char类型指针变量,它的指针域只能保存地址,我们知道"this is a book"是一个字符串数组且拿到了首元素的地址就可以找到它整个字符串,所以ps的指针域保存了首字符的地址即t的...

一个C语言中指针型字符数组的问题
故你不能给一个常量赋值,C语言中,可以作为左值,也就是可以被赋值的不能为常量!再深入一点儿,字符串常量属于静态存储(static)类。静态存储是指如果在一个函数中使用字符串常量,即使是多次调用了这个函数,该字符串在程序的整个运行过程中只存储一份。整个引号中的内容作为指向该字符串存储位置的指针...

C语言字符指针问题
举一个不是很严谨的例子。假设系统给hello的存储地址是从1开始的。那么h的存储地址是1,e的存储地址是2,以此类推。指针p指向的地址,其实是h的存储地址1。所以你用字符串输出时,用的是指针p。而*p代表的是1这个存储地址保存的值。那就是h。所以,你输出时,只能用字符输出:%c。(p+1)则代表2...

C语言中字符指针的问题 char *pointer = "Hello World!"; printf...
回答:这里的 pointer 指向的是一个字符串,字符串的首地址赋给 pointer printf("%s\\n",pointer); \/\/输出Hello World!\/\/ printf 遇到指向字符串的指 \/\/针时,输出字符串(就是这样定义的) printf("%s\\n",*pointer); \/\/输出H printf("%d\\n",pointer); \/\/输出pointer指向的地址

关于c语言中指针操作字符串和指针取值的问题
问题一里,如果你想打印字符串,printf第二个参数应该是地址而不是地址里的内容,如果你想打印一个字符,应该是%c而不是%s 应该写为printf("%s\\n",(buf+1)); 或者 printf("%c\\n",*(buf+1)); (输出是e)问题二和一应该是同样的错误 printf("%s\\n",p);是打印整个字符串'test'如...

一个c语言字符指针问题!
理论上,这种错误很明显,所以一般的编译器会检查出来,说编译器检查不到的说法是错误的。但是因为C语言是弱类型语言,检查出来也不汇报告,换做C++就不行了,会告诉你,ch="abcdefg",这句话有问题。因为"abcdefg"是一个const char [8],但是ch是一个 char *这种转换很危险。--- 2、复制不行...

C语言指针输出题,求运行结果,解释为什么是该结果:
margor gram 解释:char b[] = "program";\/\/字符串常量"program"存入数组b中 char *a = "PROGRAM";\/\/字符指针a指向字符串常量"PROGRAM"的首地址 printf("%c%s\\n", *a, b+1);\/\/首先输出a指向位置的一个字符,再从b+1处开始输出字符串,直到遇到'\\0'\/\/a指向"PROGRAM"的首地址,所以...

c语言关于打印指针所指的值的问题
只有一个问题,把printf("%s",*b);这一句中的“*”去掉,改成:printf("%s",b);就能打印“abc”了。有什么问题请留言。

c语言指针中编写函数返回结果字符串的首地址,那返回的是字符串还是首...
char* pre(char* a) \/\/一个修改传入字符串首字符为0的函数{ a[0]='0';return a; \/\/返回修改后的首地址,直接返回a,此时返回的a指针指向的地址与main函数中s指向同一个地址。也就是void* f指向的地址与s数组的地址相同。}int main(int argc, char *argv[]){char s[20]={"\\...

相似回答