如何从存储的字符串数组中使用getchar()函数?

如何从存储的字符串数组中使用getchar()函数?,c,arrays,string,char,C,Arrays,String,Char,我在Linux中编写了一个简单的C程序,可以从字符串中读取单个字符。我得到一些关于字符串函数的错误。这是我的代码: #include <stdio.h> #include <string.h> void main () { char arr[10], vv[10]; int i = 0, len; printf("enter the staement\n"); scanf("%s", arr); len = strlen(arr); print

我在Linux中编写了一个简单的C程序,可以从字符串中读取单个字符。我得到一些关于字符串函数的错误。这是我的代码:

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

void main () {
  char arr[10], vv[10];
  int i = 0, len;

  printf("enter the staement\n");
  scanf("%s", arr);
  len = strlen(arr);
  printf("String laength=%d\n", len);

  while ((vv[i] = getchar(arr)) != '\n') {
    printf("%d charcter\n");
    i++;
  }
}
我想使用存储字符串中的
getchar()
,如下所示:

arr[i] = getchar();
getchar(string array);

但不幸的是,我犯了一个错误。我可以直接从存储的字符串数组使用
getchar()
函数吗

vv
是单个
char
。您不能编写
vv[i]

另外,您确定要
\n
而不是
\0
[null]吗
scanf()
不会给您一个包含
\n
的字符串

编辑:

目前还不清楚您想要实现什么,但是如果您想要检查
arr
vv
中是否存在有效字符,您可以

  • arr
    vv
    的基址放入
    char*p
  • 检查
    是否(*p++)
    执行某些操作
  • 编辑:

    你可以试试类似的东西

    char * ip = NULL;
    char * op = NULL;
    int i = 10;              //same as array size.
    
    ip = arr;
    op = vv;
    
    while( (*op++ = *ip++) && i--)
    {
    
        //do something
    };
    

    vv
    是单个
    char
    。您不能编写
    vv[i]

    另外,您确定要
    \n
    而不是
    \0
    [null]吗
    scanf()
    不会给您一个包含
    \n
    的字符串

    编辑:

    目前还不清楚您想要实现什么,但是如果您想要检查
    arr
    vv
    中是否存在有效字符,您可以

  • arr
    vv
    的基址放入
    char*p
  • 检查
    是否(*p++)
    执行某些操作
  • 编辑:

    你可以试试类似的东西

    char * ip = NULL;
    char * op = NULL;
    int i = 10;              //same as array size.
    
    ip = arr;
    op = vv;
    
    while( (*op++ = *ip++) && i--)
    {
    
        //do something
    };
    

    当C中有字符串时,它实际上是一个以“\0”结尾的
    char
    s数组。您不需要任何方法从中获取
    char
    s。只需像访问数组一样获取
    字符

    while((vv[i] = arr[i])!='\n')
    

    正如您所看到的那样,当您的输入超过10个字符(包括
    “\0”
    )时,它将导致问题。所以最好用足够的空间来声明它

    当C中有字符串时,它实际上是一个以“\0”结尾的
    char
    s数组。您不需要任何方法从中获取
    char
    s。只需像访问数组一样获取
    字符

    while((vv[i] = arr[i])!='\n')
    
    正如您所看到的那样,当您的输入超过10个字符(包括
    “\0”
    )时,它将导致问题。所以最好用足够的空间来声明它

    读一下。该链接明确指出,
    getchar
    是一个从
    stdin
    获取字符(一个
    unsigned char
    )的函数。而且,它不需要参数。这意味着您不能使用
    getchar
    将数组的每个字符复制到另一个数组。直接用电脑复制就行了

    while( (vv[i] = arr[i]) != '\n')
    
    但是我不认为这个循环会以
    scanf
    在扫描字符串时不包含换行符(
    %s
    )而结束。所以,你有两个选择:

  • 使用
    fgets
    获取输入
  • 使用以下命令

    while( (vv[i] = arr[i]) != '\0')
    
  • 了解。该链接明确指出,
    getchar
    是一个从
    stdin
    获取字符(一个
    unsigned char
    )的函数。而且,它不需要参数。这意味着您不能使用
    getchar
    将数组的每个字符复制到另一个数组。直接用电脑复制就行了

    while( (vv[i] = arr[i]) != '\n')
    
    但是我不认为这个循环会以
    scanf
    在扫描字符串时不包含换行符(
    %s
    )而结束。所以,你有两个选择:

  • 使用
    fgets
    获取输入
  • 使用以下命令

    while( (vv[i] = arr[i]) != '\0')
    

  • 但是
    arr
    是一个数组,所以只需使用
    arr[x]
    其中
    x
    是您想要获取的字符号?您的代码还有其他问题,例如使用
    scanf
    读取的字符串中没有换行符,等等。@JoachimPileborg您在读取字符串时不需要
    '\n'
    !对吗?你最后一个“
    prinf
    ”没有任何意义。这是
    prinf(“%d字符\n”)没有传递到打印的整数参数!但是
    arr
    是一个数组,所以只需使用
    arr[x]
    其中
    x
    是您想要获取的字符号?您的代码还有其他问题,例如使用
    scanf
    读取的字符串中没有换行符,等等。@JoachimPileborg您在读取字符串时不需要
    '\n'
    !对吗?你最后一个“
    prinf
    ”没有任何意义。这是
    prinf(“%d字符\n”)没有传递到打印的整数参数!sry,更改为vv[10]array@user39133不要在适当的地方改变问题。现在这个答案毫无意义,我打算投反对票。sry,改为vv[10]array@user39133不要在适当的地方改变问题。现在这个答案毫无意义,我打算投反对票。