使用指针字符串会产生分段错误

时间:2015-11-19 13:35:25

标签: c string pointers

任务主要是使用指针输入一个字符串并在有“\”字符的地方将其切片,然后使用指针将它们分开输出。当我使用数组而不是指针时,程序运行正常。但是,使用指针存储字符串会给出消息“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。

4 个答案:

答案 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