我无法使用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]);
}
~
答案 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);
只要我们想要特定我们要转到%c
或printf
的变量属于scanf
类型,就会使用char
格式说明符。
另一方面,%s
格式说明符用于指定printf
或scanf
函数,指定为下一个参数的地址内容将被视为{ {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]
应该是文字。