【发布时间】:2021-01-29 07:28:14
【问题描述】:
我正在编写一个 C 程序,提示用户以 (xxx)xxx-xxxx 的形式输入电话号码,然后以 xxx.xxx.xxxx 的格式显示该号码。这是一个例子:
Enter a phone number [(xxx) xxx-xxxx]: (404)817-6200
You entered the data 404.817.6200
我创建了两个字符串,一个用于存储带有括号和“-”符号的电话号码,另一个是空的。我想将每个字符添加到空字符串中,将 ')' 和 '-' 更改为 '.'。这是我的代码:
#include <stdio.h>
int main(void){
char num[15];
char phone[13];
int i = 1;
int j = 0;
printf("Please, enter your phone number in the format (xxx)xxx-xxxx:");
scanf("\n%s", num);
while(num != '\0'){
if(num[i] == ')' || num[i] == '-'){
phone[j] = '.';
}else{
phone[j] = num[i];
}
i++;
j++;
}
printf("\n%s",phone);
}
当我运行程序时,它给了我一条错误消息:
Segmentation fault
有人可以解释为什么会发生这种情况以及将来如何预防吗?
【问题讨论】:
-
while(num != '\0')->while(num[i] != '\0') -
成功了!你能解释一下吗?
-
@RomanMukosieiev 你的编译器应该已经警告你了。
num是数组,但您只需要数组的 一个 元素。 -
您没有将空终止符复制到
phone。 -
至于为什么会这样,和你的原因一样
num[i] == ')'
标签: c string segmentation-fault scanf