使用scanf接受字符串并使用printf显示它们

时间:2018-04-13 10:35:44

标签: c

我无法使用printf检索字符串。反而得到错误:分段错误

int main(){

        char * a[5];
        int i;

        printf("\n enter value ");

        for (i=0;i<5;i++){
                printf("%d Name :\n",i);
                scanf("%s",&a[i]);
        }

        printf("%s",a[2]);
        printf("%s",a[3]);

}
~     

3 个答案:

答案 0 :(得分:2)

proxy_pass http://172.0.0.78:3033; if ($http_user_agent ~* "(Android|iPhone|iPod|Symbian|BlackBerry|Windows Phone|Mobile|J2ME)") { root /home/xxx/; rewrite /(.*) /index.html; break; } char * a[5];,这意味着你可以存储5个任意长度的char缓冲区。 问题出在声明中 array of 5 char pointer将其替换为scanf("%s",&a[i]);

案例1 : -

scanf("%s",a[i]);

案例2 : -

int main(){
        char *a[5] = {"stackoverflow","meta","ask ubuntu","super","unix"};
        /* here a[row] can have any number of char */
        for (int i = 0 ;i < 5;i++) {
                printf("%s\n",a[i]);
        }
        return 0;
}

答案 1 :(得分:0)

问题是你在初始化之前使用指针。它还没有指向有效的内存。这些会导致程序崩溃或其他类型的意外行为,例如“分段错误”。

所以你应该把它编辑成:

char* my_string = malloc(size+1);

只要我们想要特定我们要转到%cprintf的变量属于scanf类型,就会使用char格式说明符。

另一方面,%s格式说明符用于指定printfscanf函数,指定为下一个参数的地址内容将被视为{ {1}}。

您将string作为输入,而不是整个char

string,将是scanf("%s",&a[i]);
scanf("%c",&a[i]);printf("%s",a[3]); printf("%c",a[3]);printf("%s",a[2]);

以下代码运行良好:

printf("%c",a[2]);

答案 2 :(得分:0)

不应输入char*。 并且您不应该按char*存储任何字符串,包括string literal,事实上,转换为string literal的{​​{1}}在很多年前已被弃用。 请改用char*char a[5][MaximumLength]应该是文字