任务主要是使用指针输入一个字符串并在有“\”字符的地方将其切片,然后使用指针将它们分开输出。当我使用数组而不是指针时,程序运行正常。但是,使用指针存储字符串会给出消息“Segmentation fault”。代码如下:
#include <stdio.h>
#include <stdlib.h>
int main() {
char *name;
char *sep[100];
int i = 0, j = 0, k = 0;
scanf("%[^\n]s", name);
for(i = 0; (*(name+i)) != '\0'; i++) {
if((*(name+i)) == '\\') {
*((*(sep+k))+j) = '\0';
j = 0;
k++;
} else {
*((*(sep+k))+j) = *(name+i);
j++;
}
}
for(i = 0; i <= k; i++) {
printf("%s\n", *(sep+i));
}
return 0;
}
如果您能够指出问题的原因和位置,那将是非常棒的,而不是给我一个替代解决方案。 TIA。
答案 0 :(得分:1)
你的指针是空指针。你通过使用它们调用未定义的行为而不将它们分配给已分配的内存。为它们分配内存,以便你可以正确使用它们并存储由\分隔的单词。你也可以使用{{1而不是[]
。
*
答案 1 :(得分:0)
在您的代码中,
scanf("%[^\n]s", name);
name
是一个未初始化的指针。它没有指向任何有效的内存位置。您需要先分配内存才能使用它。
sep
数组也是如此。
您可以考虑使用数组用于此目的,或者如果您想要坚持指针,请参阅malloc()
man page。
FWIW,使用单位指针可以导致undefined behavior。
答案 2 :(得分:0)
您必须为指针分配空间以避免未定义的行为:如果不初始化指针,则无法使用指针。
int main() {
char *name = malloc(MAX_DIM_OF_NAME+1);
char *sep[100];
for (int i=0; i<100; i++)
sep[i] = malloc(MAX_DIM_OF_NAME+1);
....
答案 3 :(得分:-1)
您使用未初始化的scanf
致电name
。