字符指针和字符串

时间:2017-11-18 16:56:04

标签: 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是字符类型但是根据程序没有存储任何内容。

1 个答案:

答案 0 :(得分:0)

首先要做的事情' 数组名称只是保存第一个元素地址的指针。 所以,

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

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

所以,ss = s;也就是说ss也持有s所持有的地址。

因为你没有存储任何东西所以它会打印垃圾。类似地,指针tt最初不存储任何地址(垃圾)。 最后也是最重要的 你不能执行这个操作: * TT ++ = * SS ++; 可能会显示lvalue recquired的错误。