我想用C编程语言将char[]
数组转换为char*
字符串。这就是我做的。但我无法达成解决方案。请帮我。这是我的代码:
#include <stdio.h>
void fnk(char *chr){
printf("%s",chr);
}
int main(){
char charfoo[100];
int i=50;
gets(charfoo);
for(int j=0;j<i;j++){
fnk((char*) charfoo[j]);
}
}
答案 0 :(得分:1)
我认为你的意思是以下
fnk( &charfoo[i]);
考虑到以下列方式编写循环会更好
for( int j=0; charfoo[j]; j++ ) {
fnk( &charfoo[j]);
}
此外,函数gets
不安全,C标准不再支持它。而是使用函数fgets
例如
fgets( charfoo, sizeof( charfoo ), stdin );
在这种情况下,循环可以看起来像
for( int j=0; charfoo[j] != '\0' && charfoo[j] != '\n'; j++ ) {
fnk( &charfoo[j]);
}
如果你想在函数中只输出一个字符,那么该函数应该被定义为
void fnk(char chr){
printf("%c",chr);
}
并调用
fnk( charfoo[j]);
答案 1 :(得分:1)
如果我们从莫斯科Vlad建议从gets()
切换到fgets()
,那么fgets()
的返回值与fnk()
的参数类型相同,所以我们可以直接传递结果:
#include <stdio.h>
void fnk(char *string) {
printf("%s", string);
}
int main() {
char charfoo[100];
fnk(fgets(charfoo, sizeof(charfoo), stdin));
return 0;
}
复杂性的下一步是将fgets()
的结果保存到char *
指针,并在传递它之前测试它是否NULL
{或不是fnk()
)char *
。
如果您希望数组charfoo[]
的实际char[]
副本存在于内存中,而不是简单地将char *
数组作为#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fnk(char *string) {
printf("%s", string);
}
int main() {
char charfoo[100];
char *input = fgets(charfoo, sizeof(charfoo), stdin);
if (input != NULL) {
char *string = strdup(input);
if (string != NULL) {
fnk(string);
free(string);
}
}
return 0;
}
指针传递,则可以执行以下操作这也引发了很多错误检查:
Stack<String> stack1 = new Stack<String>();
Stack<String> stack2 = new Stack<String>();
Set<String> duplicateCheck = new HashSet<String>();
try
{
//Read file
File myFile = new File("TestData.txt");
FileReader fr = new FileReader(myFile);
BufferedReader br = new BufferedReader(fr);
String line = null;
int count = 0;
while((line = br.readLine()) != null)
{
StringTokenizer st = new StringTokenizer(line,",");
while(st.hasMoreElements())
{
duplicateCheck.add(st.nextToken());
if(count < 9)
{
stack1???????????????;
}
if(count >9 && count <19)
{
stack2???????????????;
}
if(count >= 19)
{
System.out.println("Capacity has been reached");
}
count++;
}
}
但在所有情况下,您似乎都在制造比他们需要的更难的东西。
答案 2 :(得分:0)
使用i
调用fnk只需50次相同的调用 - 假设您要使用j
而代码看起来像这样
#include <stdio.h>
void fnk(char *chr){
printf("%s",chr);
}
int main(){
char charfoo[100];
int i=50;
gets(charfoo);
for(int j=0;j<i;j++){
fnk(charfoo + j);
}
}
请注意,如果输入长于charfoo(即99字节+换行符+ null),gets
可能导致缓冲区溢出 - 但这是另一回事