【问题标题】:String is not getting Copied, after reading the source string from scanf()从 scanf() 读取源字符串后,字符串没有被复制
【发布时间】:2017-05-20 17:47:57
【问题描述】:
#include<stdio.h>

int main(){
  char a[20],*p;
  p=a;
  printf("Enter the String");
  scanf("%s",p);
  printf("\n\n%s\n",p);
  printf("Copying the String\n");
  char b[20],*pp;
  pp=b;
  while((*pp++=*p++));
  printf("\n%s\n",pp);

}
                                                                                                                                                                          

此代码不复制字符串。但是,如果我将 b[20] 更改为 b[10],它会复制字符串的最后 9 个字符。顺便说一句,当我设置 b[10] 时,如果输入包含空格,那么它不会复制字符串。


编译器设置:

配置为:--prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM 版本 8.1.0 (clang-802.0.42)
目标:x86_64-apple-darwin16.5.0
线程型号:posix
安装目录:/Library/Developer/CommandLineTools/usr/bin

【问题讨论】:

  • 为什么要用c++标签?

标签: c arrays pointers


【解决方案1】:

之后:

    while((*pp++=*p++));

pp 指向字符串的结尾。你想要:

     printf("\n%s\n",b);

【讨论】:

  • 当b[]为10时,不应该出现segmentationFault吗?当我传递更长的字符串时,最后 9 个字符被打印出来,我假设它们超过了数组限制。
  • @Shan 超出数组的范围会使您进入未定义的行为领域 - 无法保证分段错误或其他任何情况。
  • 当我使用 b[10] 并传递一个小字符串(4 个字符)时,打印返回 4 个字符。但是正如您所说,指针必须指向 null 并且不应打印任何字符,这怎么可能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
相关资源
最近更新 更多