分段故障。让函数从一个元素跳转到另一个元素并将输出保存到数组

Posted

技术标签:

【中文标题】分段故障。让函数从一个元素跳转到另一个元素并将输出保存到数组【英文标题】:Segmentation fault. for a function to jump from an element to another element and save the output to an array 【发布时间】:2022-01-12 20:03:35 【问题描述】:

我正在尝试从一个元素跳转到另一个元素,指定跳转次数和跳转次数,例如k=4,如果到达终点则从起点返回。例如,在代码中,a[Max] 的数组将类似于 1,4,7,1

#define Max 100
int main() 
   int i=0,n,k,counter,j=0;
   char v[Max]=1,2,3,4,5,6,7,8;
   int a[Max];
   k=4;
   counter=k+1;
   int size=strlen(v);
   while(counter!=0) 
       for(i=0;i<size;i=i+k-1)
           a[j]=(int)v[i];
           j++;
           counter--;
       
   

【问题讨论】:

看看你的 for 循环。你正在做 i+k-1。您不会在每次迭代中增加 i 的值。它总是保持 0 thx 但更改后它仍然给我一个分段错误 int size=strlen(v); 没有意义。 v 不是以 0 结尾的字符字符串。 但我需要它知道它何时停止迭代 【参考方案1】:

您不应该为此使用字符串或strlen()。使用 int 数组,您可以使用 sizeof 获取 int 数组的大小。在这里,sizeof(v) 将告诉您为数组分配的字节数,在本例中为 36(假设整数为 4 个字节)。然后你可以用sizeof(int)除以整数的字节数,得到数组中的元素数9

您出现了段错误,因为您在数组范围之外写入。你不需要那个外循环,应该完全删除它。 要环绕您的数组,请使用具有数组大小的模运算 (%)。 Understanding The Modulus Operator %

#include <stdio.h>

#define MAX 100
int main() 
    int i = 0, ii = 0, k = 4, counter = k - 1, j = 0;
    int v[]= 1, 2, 3, 4, 5, 6, 7, 8, 9;
    int a[MAX];
    int size = sizeof(v) / sizeof(int);

    for (i=0; counter >= 0; i += k - 1) 
        a[ii++] = v[j];
        counter--;
        j = (j += 3) % size;
    

    for (int i = 0; i < k; i++) 
        printf("%d\n", a[i]);
    

输出:

1
4
7
1

【讨论】:

以上是关于分段故障。让函数从一个元素跳转到另一个元素并将输出保存到数组的主要内容,如果未能解决你的问题,请参考以下文章

nodejs puppeteer打开一个页面后,在点击跳转到另一个页面 怎么判断这么页面是不是所有的元素都已加载完成

AVQueuePlayer 从资产跳转到另一个时令人讨厌的延迟

点击按钮跳转到下一题js

iframe从一个页面跳转到另一个页面

php页面中,通过点击人的姓名就跳转到另一个页面,并将此姓名作为下一个页面的输入值,代码怎么写?

点击事件然后页面跳转到指定DOM元素的位置