字符指针和字符串

标签 c string char char-pointer

专家们,《Let us C》一书中给出了一个问题,其中作者要求编写给定程序的输出。 该计划是-

#include<stdio.h>
int main()
{
    char s[]="Churchgate: no church no gate";
    char t[40];
    char *ss,*tt;
    ss=s;
    while(*ss!='\0')
        *tt++=*ss++;
    printf("%s\n",t);
    return 0;
}

当我在 gcc 编译器上尝试时,输出被核心转储。请解释原因。这里 ss 和 tt 是字符指针。 这里我也不明白ss=s;这句话是什么意思? 我的意思是我们不能直接复制字符串,除非我们逐个字符地复制它。而 ss 是一个字符指针,所以它指向一个字符,那么 ss=s 意味着什么?这是否意味着它将指向地址为 s 的 ASCII 值的字节? 我也不明白这个说法*tt++=*ss++。我对此没有任何线索。请详细说明其含义。

接下来我不明白为什么使用 printf("%s\n",t) 就好像 t 是字符类型一样,但它没有根据程序存储任何内容。

最佳答案

首先是第一件事” 数组名只不过是保存第一个元素地址的指针。 所以,

char s[]="Churchgate: no church no gate";

这里 s 是指针名称。它保存字符串“C”的地址。 现在您已经声明了另一个指针,它也是字符类型,即 ss。

所以,ss=s;意味着 s 也持有 s 持有的地址。

由于您没有存储任何内容,因此它将打印垃圾。同样,指针 tt 最初不存储任何地址(垃圾)。 最后也是最重要的 你不能执行这个操作: *tt++=*ss++; 可能会向您显示所需左值的错误。

关于字符指针和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47368624/

相关文章:

c - 回文链表

java - 查找加起来等于给定字符串的所有子字符串组合

c - 如果最后一个字符是 ' [space]',程序不会以 EOF 退出并且不会打印

java - 使用 toString 打印 ArrayList

iphone - 如何将 NSData 转换为 Char?

java - 序列计数 - 字符串 java 中的字符

c - ezxml xml解析api

c - C中的一个小困惑

c++ - libclang/libtooling 处理或关闭所有错误输出

c - 使用 argv 读取特定字母,然后将其用作开关(C 程序)