如何将char []数组转换为char *

时间:2016-11-13 17:09:33

标签: c string char

我想用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]);
    }

}

3 个答案:

答案 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可能导致缓冲区溢出 - 但这是另一回事