5

所以我正在尝试使用 putch 和一些指针来打印输入的字符串。

这是我当前的代码:

#include<stdio.h>
#include<conio.h>
#include<string.h>

void printer(char *c);
char *c;
char ch;
main(){
  clrscr();
  printf("Enter a string: ");
  scanf("%s",&ch);
  c = &ch;
  printer(c);
  getch();
}


void printer(char *c){
  int x;
  for(x=0;x<strlen(c);x++){
     putch(*c);
  }
}

问题是我只能打印字符串的第一个字符,而且由于某种原因 strlen 总是为 3 个字符及以下的字符串返回 3。

我是否必须为此使用数组才能使用 putch,因为它仅限于 1 个字符输出。

4

6 回答 6

2

其中一个问题是您的打印机()函数没有打印除第一个字符以外的任何内容。有两种方法可以解决这个问题。使用指针:

void printer(char const *c){
    while ( *c != '\0' ) {
        putch(*c);
        c++;
    }
}

并使用指针算术:

void printer(char const *c) {
    int x;
    for ( x=0; x < strlen(c); x++ ) {
        putch( *(c + x) );
    }
}

最大的问题是您试图将字符串存储在内存中的单个字符中。那只是自找麻烦。

char ch;
scanf("%s",&ch); // NO NO NO NO NO

而是将您的缓冲区(用于存储字符串)声明为一个足够大的数组,以容纳您期望的最大字符串:

char ch[512];
scanf("%s", ch);
于 2013-07-11T11:25:55.410 回答
1

试试这个代码:

#include<stdio.h>
#include<conio.h>
#include<string.h>

void printer(char *c);
char *c;
char buffer[1000];// use as a buffer
void main(){
  clrscr();
  printf("Enter a string: ");
  scanf("%s",buffer);//read the input to the buffer
  c=(char*)malloc(strlen(buffer)+1);//alloc memory with len of input + 1 byte to "\0"(end of string)
  strcpy(c,buffer);//copy the input from the buffer to the new memory
  printer(c);
  getch();
  free(c);//free the memeory
}

  void printer(char *c)
  {
     int x;
     for(x=0;x<strlen(c);x++){//move the index string pointer to next char in the string
       putch(c[x]);//print the char to the screen
      }
  }

1)你不能使用 char 来保存你需要 char* 的字符串!!!

2)您可以输入未分配的内存!!!!因为你必须在分配字符串之后按缓冲区内输入的大小读取缓冲区的输入!

于 2013-07-11T11:31:03.020 回答
1

首先,您将指向“一个字符的存储”的指针传递给scanf. 之后发生的任何事情都在nsal 恶魔领域。

其次,scanf不为您的输入分配存储空间,因此即使您通过c而不是&ch,您也不会更好。

第三,你真的应该在里面声明你的变量main而不是使用全局变量。

像这样的东西可能更接近你真正想要的:

void output (char *c)
{
   char *cp;
   for (cp = c; *cp; cp++) {
     putch(*cp);
   }
}

int main (void)
{
  char input[80];
  printf("Please input a string: ");
  scanf("%s\n", input);
  output(input);
}
于 2013-07-11T11:35:21.423 回答
0

您的代码仅打印第一个字符,因为 c 始终指向数组的第一个字符。要打印总字符串,您还需要增加字符指针您需要这样做

void printer(char *c){
 while(*c != '\0'){
    putch(*c);
    c++;
  }
}
于 2013-07-11T11:24:48.623 回答
0

首先计算字符串的长度,然后像这样使用上面的实现 -

void printer(char *c){
  int i, length;
  length=strlen(c)
 for(i=0;i<lenth;i++,c++){
    putch(*c);
  }
}

我认为它应该有效。

于 2013-07-11T11:43:07.787 回答
-1
    #include<stdio.h>
#include<conio.h>
#include<string.h>

void printer(char *c);
char *c;
char ch;//the ch should be a array
main(){
  clrscr();
  printf("Enter a string: ");
  scanf("%s",&ch);//the ch don't need '&'
  c = &ch;//the ch don't need '&'
  printer(c);
  getch();
}


void printer(char *c){
  int x;
  for(x=0;x<strlen(c);x++){
     putch(*c);
  }
}
于 2013-07-11T11:26:28.907 回答