为了账号安全,请及时绑定邮箱和手机立即绑定

请问这个字符串操作哪里错了呢?感觉字符串操作很特别。。完全不会

请问这个字符串操作哪里错了呢?感觉字符串操作很特别。。完全不会

C C++
慕姐6162487 2018-07-27 01:03:37
#include <stdio.h>#include <string.h>int main() { char a[10000];         char b[10000];         printf ("请输入两个字符串:");         while(1){         putchar(a[0]); }         //scanf("%s\n");         printf ("%s",a[0]) ;         return 0;}上面的代码执行出来。。是永远在输入,没有输出。。感觉字符串的操作很麻烦。。摸索到现在还是不太会。。再如以下的也有点奇怪的感觉#include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ char line[] = "hello,my name is xx\n"; printf("%s",line); char *copy = (char*)malloc(strlen(line)+1); strcpy(copy,line); copy[strlen(line)] = '\0' ; //printf("%s\n",*copy); printf("%s\n",copy); return 0;}问题在于。。。上面的代码最后一行为什么printf后面的copy不用加*呢?同样是运用指针,如果我用来操作打印int型变量就一定是要加*的,不然打印出来是地址。。但是字符串又不一样。。。求各位大佬慷慨解释一下
查看完整描述

1 回答

?
慕盖茨9781818

TA贡献25条经验 获得超19个赞

  1. 第一个,因为你的puchar在while(1)中,你没设置break的条件,会无限循环要求你输入的,修改循环部分代码

  2. C语言中是没有特定字符串类型的,你使用%s输出, 参数是一个指向字符数组的指针,所以你的copy不用加*, 因为copy本来就是个指针,你传入int,他会认为这是个指针来进行操作,就会输出地址,所以你需要加*号。

    可能有点没描述清楚,但第二个你需要多看看指针相关的内容。

查看完整回答
反对 回复 2018-07-27
  • 慕姐6162487
    慕姐6162487
    关于第一个代码。。我刚试了下。。。直接加break。。也是一直在输入的。。另外。。我之前不用while循环,只写了一个scanf。。也是一直在输入的。。没法输出
  • 慕盖茨9781818
    慕盖茨9781818
    你用错函数了,。。。。之前没注意,你应该用getchar()呀
  • 1 回答
  • 0 关注
  • 973 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信