小编Bla*_*ary的帖子

将2D阵列映射到1D阵列上

我想用一维数组表示一个二维数组.函数将传递两个指标(x,y)和要存储的值.这两个标记代表一维阵列的单个元素,并相应地设置它.我知道1D数组需要有arrayWidth×arrayHeight的大小,但我不知道如何设置每个元素.

例如,我如何区分(2,4,3)和(4,2,3)?我尝试将数组设置为x*y,但是2*4和4*2将导致数组中的相同位置,我需要它们不同.

c arrays multidimensional-array

81
推荐指数
4
解决办法
14万
查看次数

非常小的程序,以提高编程技巧?

我意识到要成为更好的程序员,你需要编程!显然,练习越多,你就越好.

我的问题是这个.我目前在大学,我发现我的课程负担有点令人生畏,而且我没有很多空闲时间.我认为我不能真正承担一个大项目,特别是我认为我不会有动力去看它,我会更容易继续推迟,以支持应有的工作.学校.

但我还是想练习.所以我正在寻找任何可以在相当短的时间内完成编程挑战的资源.理想情况下,我可以在不到10小时的工作时间内完成这项工作(每天工作超过一小时),如果不是更小的话.

我听说过Google Code Jam,但我不确定它指定的程序的长度,也不确定技能水平.

有没有人有建议?甚至可能有关不同功能的教程纲要可能也很有用.例如,关于文件IO的教程是值得的(如果我还不知道的话),即使它可能是一个相当小的主题.

c java

65
推荐指数
6
解决办法
5万
查看次数

在C中为结构分配内存

我的任务是创建一个为结构动态分配内存的程序.通常我们会用

x=malloc(sizeof(int)*y);
Run Code Online (Sandbox Code Playgroud)

但是,我对结构变量使用什么?我认为不可能这样做

struct st x = malloc(sizeof(struct)); 
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗?谢谢!

c malloc structure

29
推荐指数
4
解决办法
8万
查看次数

如何确定何时到达文件结尾?

我试图从文本文件中读取文本.我需要帮助搞清楚文件结束的时间.如何在Java中确定这一点?

FileInputStream istream = new FileInputStream("\""+filename+"\"");      
Scanner input = new Scanner(istream);
while(EOF != true)
{
 ....
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

java file-io file java.util.scanner

19
推荐指数
2
解决办法
8万
查看次数

从字符串中删除子字符串?

我有一个C函数,它接受一个名为'buffer'的字符串,并解析它,它将匹配关键字并使用它来分配结构中的值.

但是,我想完全忽略一些关键字.

该程序解析VCard文件(.vcf,虚拟名片).

以下是可能提供的示例行缓冲区:

FN;CHARSET=UTF-8:David Celery
Run Code Online (Sandbox Code Playgroud)

FN是我感兴趣的关键词,而David Celery是与FN相关的值.

然而,CHARSET = UTF-8是我根本不关心的事情.

所以我的问题是,有没有办法让我扫描我的缓冲区,只需用'"替换'CHARSET = UTF-8',这样我就不用担心解析它(以及我想要的其他类似关键字)忽视).

谢谢,

c string

11
推荐指数
1
解决办法
5万
查看次数

strcat将char连接到字符串上?

使用GDB,我发现在尝试此操作时出现了分段错误:

strcat(string,&currentChar);
Run Code Online (Sandbox Code Playgroud)

鉴于该字符串被初始化为

char * string = "";
Run Code Online (Sandbox Code Playgroud)

和currentChar是

char currentChar = 'B';
Run Code Online (Sandbox Code Playgroud)

为什么会导致分段错误?

如果strcat不能用于此,我怎么能将char连接到一个字符串?

c string concatenation char strcat

10
推荐指数
2
解决办法
5万
查看次数

使用Malloc在C中定义结构

我之前问了一个关于使用malloc定义结构的问题.这是大多数人给出的答案:

struct retValue* st = malloc(sizeof(*st));
Run Code Online (Sandbox Code Playgroud)

我向朋友展示了我的代码,我们遇到了绊脚石.有人可以解释为什么这段代码有效吗?从我的观点来看,当你对它进行malloc时没有定义*st,因此那里可能存在任何类型的垃圾.它应该是malloc(sizeof(struct retValue))

谢谢你的帮助

c memory malloc structure

7
推荐指数
2
解决办法
1万
查看次数

用fgets读取的行上的strcmp

我想比较两个字符串.一个存储在一个文件中,另一个从用户(stdin)中检索.

这是一个示例程序:

int main()
{
    char targetName[50];
    fgets(targetName,50,stdin);

    char aName[] = "bob";
    printf("%d",strcmp(aName,targetName));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在此程序中,strcmp输入时返回值-1 "bob".为什么是这样?我认为他们应该是平等的.我怎样才能得到它们呢?

c string input fgets strcmp

7
推荐指数
2
解决办法
2万
查看次数

如何将char转换为二进制?

有没有一种简单的方法将字符转换为二进制表示?

我试图将消息发送到另一个进程,一次一个位.因此,如果消息是"Hello",我需要先将"H"转换为二进制,然后按顺序发送这些位.

存储在阵列中将是优选的.

感谢任何反馈,伪代码或实际代码将是最有帮助的.

我想我应该提到这是为了让学校的作业能够学习信号......这只是学习它们的有趣方式.SIGUSR1用作0,SIGUSR2用作1,并且重点是从一个进程向另一个进程发送消息,假装环境正在锁定其他通信方法.

c binary char

6
推荐指数
1
解决办法
5万
查看次数

为什么不调用我的信号处理程序?

我正在进行一项任务,该任务使用信号在两个进程之间传输二进制消息,目的是了解信号(这确实是一种奇怪的用法).

在我的程序中,两个进程传递代码,然后一个消息传递给另一个.SIGUSR1代表0,SIGUSR2代表1.想法是发送消息的进程将使用kill函数与任何SIGUSR来获取消息,接收进程将有一个信号处理程序来解释代码.

所以这就是问题所在.我有发件人启动.它在等待代码发送时休眠.接收方发送两个SIGINT来表示"密码",pidof(8)用于查找发送方的pid.

一旦发送者的信号处理程序读取了这些信号,识别出它是正确的密码,它就会继续发送消息.

接收器现在经历了一些功能,并且每秒钟都在等待通过中断传递每个位.问题是,这种情况从未发生过.

我已将其设置为发送方正在发送一个位(在这种情况下为0),如下所示:

kill(washingtonPID,SIGUSR1);
Run Code Online (Sandbox Code Playgroud)

其中washingtonPID是接收器的PID,我已经验证这是正确的PID.

接收者的处理程序如下所示:

//IN MAIN
    signal(SIGINT,bitReceiver);
    signal(SIGUSR1,bitReceiver);
    signal(SIGUSR2,bitReceiver);
//OUTSIDE MAIN

    void bitReceiver(int signum)
{
    if(signum == SIGUSR1)
    {
        fprintf(stderr,"SIGUSR1 - 0");
        bit = 0;
    }
    else if (signum == SIGUSR2)
    {
        fprintf(stderr,"SIGUSR2 - 1");
        bit = 1;
    }
    else //sigint
    raise(SIGINT);

    return;
}
Run Code Online (Sandbox Code Playgroud)

其中bit是全局变量.它最初设置为-1.

这是读取位的函数:

 int receiveBit()
{
    while(bit == -1)
    {
        sleep(1);
    }
    fprintf(stderr,"%d",bit);
    int bit2 = bit;
    bit = -1;
    return bit2;
}
Run Code Online (Sandbox Code Playgroud)

所以基本的运行是这样的:在代码从接收器发送到发送器之后,发送器开始向接收器发送USR1和USR2的终止信号,最终应该形成二进制消息.

接收器只是在这一点等待,每秒钟都在睡觉.当它被中断时,处理程序将位设置为0或1,将其踢出睡眠状态,打印该位并返回它.

如果我让两个程序正常运行,接收器就处于休眠状态,并且永远不会调用处理程序(即使我可以看到其他进程正在进行调用).

如果我停止发送器,并手动发送杀戮信号,我可以发送一个,也许两个信号,两者都正确处理.之后,我收到一条消息,如"用户信号2",打印到终端.这不是我的程序中的东西,程序立即停止.

任何关于为什么我的处理程序没有被使用的见解,以及为什么我不能手动发送超过一个或两个信号将非常感激.

谢谢你的时间.

编辑:似乎人们对此感到难过.有没有我可以尝试的调试技巧?

c unix posix signals

6
推荐指数
1
解决办法
7939
查看次数