如何从存储的字符串数组中使用getchar()函数?
我在Linux中编写了一个简单的C程序,可以从字符串中读取单个字符。我得到一些关于字符串函数的错误。这是我的代码:如何从存储的字符串数组中使用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
#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不要在适当的地方改变问题。现在这个答案毫无意义,我打算投反对票。