【发布时间】:2015-12-19 16:05:09
【问题描述】:
所以基本上我的程序在我必须更改它以使其接受任意值之前所做的就是获取 x 数量的单词,并且单词的大小也是任意的。 (两者都是用户输入的)。我通过 multiArray 做到了这一点。 然后按字母顺序排序。
我只是要把它放在那里,因为我的代码很糟糕,而且我对任意字符串和指针的使用非常不熟悉。 I've read up on it in the manual 但我相信这个概念首先需要深入一点。无论如何,我在运行程序时收到错误:“Abort trap: 6”。任何人都可以帮我解决这个问题,以便我可以看到代码在实际工作时的样子,我认为这将帮助我更好地理解指针和分配内存。如果你这样做了,就会永远负债累累。
当前代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LENGTH 10
int main(){ //8
char *name;
char tname[] = {0};
char temp[] = {0};
int i=0, j=0, n=0;
ssize_t bytes_read;
size_t bytes_number;
printf("Enter the amount of words you want to input: ");
scanf("%d", &n);
printf("Enter %d words: ",n);
bytes_number = MAX_LENGTH;
name = (char *) malloc (bytes_number+ 1);
bytes_number = 0;
bytes_read = getline(&name, &bytes_number, stdin);
if (bytes_read == -1){
puts("ERROR!");
free(name);
}
for (i = 0; i < n; i++){
strcpy(&tname[i], &name[i]);
}
for (i = 0; i < n - 1 ; i++){
for ( j = i + 1; j < n; j++){
if (strcmp(&name[i], &name[j]) > 0){
strcpy(temp, &name[i]);
strcpy(&name[i], &name[j]);
strcpy(&name[j], temp);
}
}
}
printf("\n------------------------------------------\n");
printf("%-3s %4s %11s\n", "Input","|", "Output");
printf("------------------------------------------\n");
for (i = 0; i < n; i++)
{
printf("%s\t\t%s\n", &tname[i], &name[i]);
}
printf("------------------------------------------\n");
}
【问题讨论】:
-
只是
puts("ERROR!");和 continue 不是正确的错误处理。你为什么投malloc(),编译器会抱怨吗?而且,char tname[] = {0};看起来不像你想要的。 -
程序编译正常,但是在我完成第一个输入阶段后,程序崩溃了。您有什么解决方案吗?
-
注意:没有
-Wall也能正常编译可能不是真的fine。 -
@Joel 你必须重新设计你的程序。您需要存储
n字词。但是你需要考虑: 1.一个词不能超过10个字符,这是你定义的限制。 - 2.您尝试将每个单词复制到同一个变量中(参见iharob的答案);那不是你想要的。 - 3. 你也需要学习 C 中的数组,而不仅仅是指针。
标签: c allocation bubble-sort