小编yot*_*moo的帖子

char*和char**之间的区别(在C中)

我写的这段代码很简单

#include <stdio.h>
#include <string.h>

void printLastLetter(char **str)
{
    printf("%c\n",*(*str + strlen(*str) - 1));
    printf("%c\n",**(str + strlen(*str) - 1));
}

int main()
{
    char *str = "1234556";
    printLastLetter(&str);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我想打印字符串中的最后一个字符,我知道printLastLetter的第一行是正确的代码行.我不完全理解的是*str和**str之间的区别.第一个是字符数组,第二个是?另外,char*str和str [10]之间的内存分配有什么不同?Thnks

c string pointers

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

在JavaScript中创建彩色文本

我正在尝试编写一个将特定文本打印到<div id="1">标签中的函数.

字符串应标记不同颜色的某些索引值.

我现在写的是转到我拥有的所有索引值并添加<font color="color">标签,然后我使用它添加它div1.innerHTML = result;

它做了很多工作,而且非常复杂.有没有其他方法可以创建一个字符串对象,就像我没有这些HTML标签所描述的那样?

如果我能做到那么我会用 div1.appendChild(String);

html javascript

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

使用sigaction(),c

我正在做一些阅读sigaction()(来自我的课程笔记),我不确定我理解这个文字:

仅在信号处理程序的持续时间内计算和安装信号掩码.

默认情况下,信号"sig"也会在信号出现时被阻止.

使用sigaction为特定信号安装操作后,它将一直安装,直到明确请求另一个操作.

这是否意味着在从信号处理程序返回后恢复默认信号掩码?另外,使用后我是否必须重新安装处理程序,就好像我在使用它一样signal()

还有,这段代码:

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void termination_handler(int signum) {
    exit(7);
}

int main (void) {
  struct sigaction new_action,old_action;
  new_action.sa_handler = termination_handler;
  sigemptyset(&new_action.sa_mask);
  sigaddset(&new_action.sa_mask, SIGTERM);
  new_action.sa_flags = 0;
  sigaction(SIGINT, NULL, &old_action);
  if (old_action.sa_handler != SIG_IGN) {
         sigaction(SIGINT,&new_action,NULL);
  }
  sleep(10);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

那么 - 究竟将如何SIGTERM处理?我可以看到安装的处理程序是termination handler(),但随后SIGTERM被添加到信号掩码而没有使用sigprocmask().这是什么意思?谢谢!

Ps最后一个问题:为什么if声明在main()

c unix signals bitmask systems-programming

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

断开与java中的套接字

嗨,我正在构建一个小的p2p程序,实现服务器端和客户端.当我在客户端程序中吃午餐时,首先想到的是连接到列表中的每个服务器,发送数据(关于客户端)并断开连接.下次客户端连接到其中一个服务器时,它将被识别.

我的问题 - 当我告诉客户端断开连接时,我得到了这个例外

java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at oop.ex3.nameserver.NameServerThread.run(NameServerThread.java:24)
Run Code Online (Sandbox Code Playgroud)

断开我刚刚写道:

 finally {
        out.close();
        in.close();
        socket.close();
    }
Run Code Online (Sandbox Code Playgroud)

那么,我该如何避免这种异常呢?谢谢!

java sockets

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

亚行不承认电话

这一切都是一场噩梦,至少在窗户上.我把手机连接起来,一切都还好.我有三星Galaxy,我已经安装了USB驱动程序,没关系,我可以直接在手机上运行eclipse中的应用程序.现在没有什么不同,但是当我输入adb设备时,它识别我的手机但是它是离线的.选中USB调试选项,我安装了正确的驱动程序.任何的想法?谢谢!

android adb

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

仅在返回后删除守护程序线程

我正在开发一个项目,其中我有一个主线程和一个守护程序线程来执行文件输出.在我的主线程中,我有一个pthread_t * _daemon我想删除的字段,但显然只有在_daemon返回NULL之后(我明白使用pthread_exit()导致内存泄漏).

如果没有忙碌等待,我该怎么办呢?如果我尝试使用条件变量我有一个问题 - 当我调用signal()窗体_daemon唤醒我的主线程时,它会_daemon在它_daemon返回NULL 之前删除.

我所做的只是使用在程序启动时锁定的互斥锁,并在_daemon返回之前解锁.有没有更好的方法不会导致繁忙的等待?

c++ locking pthreads

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

在c中遍历数组时的分段错误

我在c中写了这个小函数:

void initializeArray(char arr[ROWS][COLS]){
    int i,j;
    for (i=0; i<COLS; i++){
        for (j=0; j<ROWS; j++){
            arr[i][j] = ' ';
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:ROWS和COLS在头文件中定义

当我打电话给它时,我不断遇到分段错误.如果我使用指针遍历数组它没关系,任何想法为什么?

ps传递的数组是在函数外部定义的,因此没有链接问题.

c segmentation-fault

4
推荐指数
3
解决办法
229
查看次数

条件跳转或移动取决于未初始化的值

我一直在努力解决这个问题一段时间,寻找每一个可能的解决方案.我是C的新手,所以我很难.我知道我有一些未初始化的变量,但我找不到它们.我正在尝试打印矩阵.这是构造函数:

BoardP createNewBoard(int width, int high)
{  

    BoardP board = (BoardP) malloc(sizeof(Board));

    if (board == NULL)
    {
        reportError(MEM_OUT);
        return NULL;
    }
    board->height = high;
    board->width = width;
    board->board = (char**) malloc(high * sizeof(char*));
    int i;
    for (i=0; i<high; i++)
    {
        board->board[i] = (char*) malloc(width * sizeof(char));
        if (board->board[i] == NULL)
        {
            freeTempBoard(board,i);
            return NULL;
        }
    }

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

构造函数返回BoardP,一个对Board的pinter,它是:

typedef struct Board
{
    int width;
    int height;
    char **board;
} Board;
Run Code Online (Sandbox Code Playgroud)

现在我没有尝试打印板 - >板.我循环遍历矩阵,对于每个单元格,我调用此函数:

static void printChar(ConstBoardP board, int …
Run Code Online (Sandbox Code Playgroud)

c valgrind

3
推荐指数
1
解决办法
8147
查看次数

gettimeofday 返回负值

我正在编写一个线程库,在调度线程时,我需要知道它们已经准备了多长时间。每个 Thread 实例都有一个timeval _timeInReady字段,当我将一个实例推送到就绪队列时,我调用了这个函数:

void Thread::startTiming() {
    gettimeofday(&_timeInReady, NULL);
}
Run Code Online (Sandbox Code Playgroud)

当我想检查当前_timeInReady值时,我调用:

double Thread::getTimeInReady() const {
    return TIME(_timeInReady.tv_sec,_timeInReady.tv_usec);
}
Run Code Online (Sandbox Code Playgroud)

TIME 在哪里#define TIME(a,b) ((a*1000000) + b)这样我就可以得到总时间(以微秒为单位)。

我的问题是,由于某种原因,我在一段时间后检查该字段时得到了疯狂的负值(例如 -10293843)。

有任何想法吗?谢谢!

c++ gettimeofday

3
推荐指数
1
解决办法
5027
查看次数

了解信号量

我正在阅读"操作系统概念"中的信号量(对于那些知道它的人),我认为我完全理解信号量,直到我读到这段经文:

信号量的关键方面是它们以原子方式执行.我们必须保证没有两个进程可以同时对同一个信号量执行等待和信号操作.

并且:

如果硬件没有提供任何特殊的原子指令,我们可以使用任何软件解决方案来解决关键部分问题,其中关键部分包括等待和信号程序.

这段经文指的是面子SignalWait操作必须是原子的.我认为信号量的全部目的是在任何给定时间只允许临界区中的一个进程 - 如果我必须使用另一种算法(如面包店算法),为什么我还需要信号量?

我意识到我的问题可能令人困惑.如果是这样,那只是因为主题对我来说仍然含糊不清,所以即使问一个问题也有点困难.

很想阅读任何澄清......

semaphore critical-section

3
推荐指数
2
解决办法
9238
查看次数