RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 821365
Accepted
alex-rudenkiy
alex-rudenkiy
Asked:2020-04-30 17:55:22 +0000 UTC2020-04-30 17:55:22 +0000 UTC 2020-04-30 17:55:22 +0000 UTC

为什么垃圾会被扔掉

  • 772

为什么显示垃圾,虽然我检查了地址是否正确传输并且我尝试在 main 中显示字符串(T_String. * Pointer)并且一切都正确返回,但在函数中它不正确?

#include <stdio.h>
#include <stdlib.h>
#include <mem.h>

#define MAX_BUFFER 255

typedef struct{
    int *pointer;
    int length;
} T_String;

int equals_len(T_String *a,int n){
    for (int i = 0; i < n-1; ++i) {
        for (int j = i+1; j < n; ++j) {
            if(a[i].length==a[j].length){
                return 1;
            }
        }
    }
    return 0;
}

//сортировка вставками
void InsertionSort(T_String *a,int n)
{
    T_String b;
    int j;

    for (int i = 1; i < n; i++)
    {
        b = a[i];
        j = i - 1;
        while(j >= 0 && a[j].length > b.length)
        {
            a[j+1] = a[j];
            j = j - 1;
        }
        a[j+1] = b;
    }
}

int word_distantion(T_String *a, T_String *b){
    int d=0;

    for (int i = 0; i < a->length; ++i) {
        printf("%s", a->pointer[i]); //Выводится какой-то мусор
    }

    //for (int i = 0; (i < a.length) && (i < b.length); ++i) {

        //printf("%s and %s = %i\n",a.pointer[i],b.pointer[i],a.pointer[i]!=b.pointer[i]);
        //if(a.pointer[i]!=b.pointer[i]){
           // d++;
        //}
    //}
}

int main() {
    signed char buffer[MAX_BUFFER];
    int n;
    T_String *strings;
    printf("Введите кол-во слов: ");
    scanf("%i",&n);
    strings = malloc(n * sizeof(T_String));

    for (int i = 0; i < n; ++i) {
        scanf("%s",buffer);
        strings[i].pointer = malloc(strlen(buffer) * sizeof(char));
        strcpy(strings[i].pointer,buffer);
        strings[i].length = strlen(buffer);
    }

    if(!equals_len(strings,n)){
        //InsertionSort(strings,n);
    }

    for (int i = 0; i < n-1; ++i) {
        for (int j = i+1; j < n; ++j) {
            if(word_distantion(&(strings[i]), &(strings[j]))>0){
                //printf("%s and %s = %i\n",a[i].pointer,a[j].pointer,word_distantion(a[i],a[j]));
            }
        }
    }

    return 0;
}
c
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Gromov Anton
    2020-04-30T22:29:23Z2020-04-30T22:29:23Z

    你可能有几个原因。让我们先摆脱显而易见的。

    好吧,按顺序:

    • mem.h“C”标准库中不存在头文件。对于“字符串”的操作,有string.h'
    • 我非常怀疑您是否想实现一个指针来键入您的结构int。在您的情况下,您正在使用字符串,因此您需要替换int* pointer;为char* pointer;
    • 谁来释放记忆?:) 创建函数来释放结构中每一行的内存以及结构数组本身。

    关于问题本身:

    我不知道你有什么编译器,但在我的编译器上gcc,在你指出的地方,通常会发生“分段错误”。没错,因为您要求显示来自某个- 元素的字符串int*,您不觉得奇怪吗?

    如果要从某种数据类型输出字符,则:

    1. 使用指向标记的指针%c(您有%s,这与单行字符的顺序输出逻辑不对应)。
    2. 在正确的参数中使用printftype char,或者从 type 中选择一个特定的字符char*,但是你有int*,所以这就是问题所在(还有其他选项,但对于这种情况,你只需要知道这些)。

    换句话说,%s替换为%c,并将结构的定义更改为下一个。方法 :

    /*2^n размер гораздо лучше для процессора*/
    #define MAX_BUFFER_LENGTH 256 
    
    typedef struct{
        /*не массив чисел, а массив символов, т.е. строка*/
        char* pointer; 
        int length;
    } String_t; 
    /*такое имя больше подходит 
    для псевдонима структуры, но это ваше право*/
    

    PS:对于这个问题,没有必要知道你如何排序和读取数据,所以在下一个。只是不要通过显示最基本的(别名和您的输出不起作用)来浪费您的时间和其他人的时间,这样我们就不会理解您的所有代码,而只是其中的关键部分。

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5