【问题标题】:How to properly set pointers to an array with chars in it如何正确设置指向包含字符的数组的指针
【发布时间】:2021-02-12 10:13:46
【问题描述】:

我希望你们中的一些人可以帮助我对分配给包含字符(特别是字母)的数组的指针有一个基本的了解。我的问题是当用户应该输入字母时,我的部分代码“D”或“U”不起作用,我不知道问题出在哪里。我试图在没有指针的情况下设置它,但这使我的程序变得更加复杂,我也在努力最终学习那该死的东西。

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int number;

   scanf("%d", &number);
   char *pz;
   char save[number];
  

   for (int i = 0; i < number; i++)
   {
       pz = &save[i];
       scanf("%s", pz+i);
   }

【问题讨论】:

  • 你不能scanf一个数字然后创建一个没有动态内存分配的大小的数组。
  • 这段代码没有任何意义。请解释一下这个程序应该做什么
  • @whiskyo 不,如果编译器允许,他可以这样做。:)

标签: arrays c char scanf pointer-arithmetic


【解决方案1】:

似乎不是这个

   for (int i = 0; i < number; i++)
   {
       pz = &save[i];
       scanf("%s", pz+i);
   }

你是说

   for (int i = 0; i < number; i++)
   {
       pz = save + i;
       scanf( " %c", pz );
   }

注意格式字符串" %c"中的空格。

指针pz已经指向数组中想要的位置

pz = save + i; 

所以在scanf 的调用中使用表达式pz+i 没有意义。

您必须使用转换说明符%c,而不是转换说明符%s

输入字符数组后可以像这样输出

printf( "%.*s\n", number, save );

或者您可以在循环中输出数组,例如

   for ( pz = save; pz != save + number; ++pz )
   {
       putchar( *pz );
   }
   putchar( '\n' );

【讨论】:

  • 是的,这正是我的意思。我只是 C 的初学者,我可以看到我还有很多工作要做。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
  • 2010-12-01
  • 2019-03-11
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
相关资源
最近更新 更多