小编sta*_*rob的帖子

基本的C指针问题

我现在正在阅读"学习C"一书,并且遇到了一个我真的不明白的问题.练习的目的是找到这段代码的问题:

char c;

c = 'a';

printf("c holds the character %c.",c);
Run Code Online (Sandbox Code Playgroud)

..然后它给出了解释说:"文本字符串"a"由两个字符组成,'a'和终止零字节.变量c的大小只有一个字节.即使c是2个字节很长一段时间,你无法以这种方式复制文本字符串.尝试将文本一次一个字节复制到一个足够大的变量中,以保存文本字符串及其终止零字节.

但是,当我运行上面的代码时 - 它完全正常.我以为我理解为什么它是坏的理论 - 整个字符串末尾的终止0,所以我重写了这样的代码来测试:

char c[2];

*c = 'a';

printf("c holds the character %c.",c);
Run Code Online (Sandbox Code Playgroud)

但这会产生问题.我开始对这个问题感到困惑.第二组代码不会将字母'a'传递给c [0]处的指针,然后将终止0传递给c [1] - 完全使用分配给该数组的2个空格?

c

4
推荐指数
2
解决办法
371
查看次数

括号对Python中的'或'运算符有什么影响?

python中这两个语句之间有区别吗:

if tag == ('/event' or '/organization' or '/business'):
Run Code Online (Sandbox Code Playgroud)

if tag == '/event' or '/organization' or '/business':
Run Code Online (Sandbox Code Playgroud)

python

4
推荐指数
2
解决办法
336
查看次数

C指针问题

我真的对指针如何工作感到困惑.我正在尝试编写简短的小程序,这些程序将完全阐明它们的工作方式,并且我遇到了一些麻烦.例如:

char c[3]; //Creates an array of 3 bytes - the first 2 bytes can be used for characters and the 3rd would need to be used for the terminating zero

*c = 'a'; //sets c[0] to 'a'
*c++; //moves the pointer to c[1]
*c = 'b'; //sets c[1] to 'b'
*c++; //moves the pointer to c[2]
*c = '\0' //sets c[2] to the terminating zero
Run Code Online (Sandbox Code Playgroud)

显然这段代码不正确,否则我不会在论坛上投票:)

我只是从一本书中解决这个问题,有人可以简单地解释一下这个概念吗?

c

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

使用'strcpy'的基本C指针问题

男人,指针继续给我带来麻烦.我以为我理解了这个概念.(基本上,当你想操纵ptr指向的位置保存的实际内存时,你会使用*ptr.如果你想通过做这样的事情来移动指针,你会使用ptr作为ptr ++或ptr--.)所以,如果是这种情况,如果你使用星号来操纵指针所指向的文件,这是如何工作的:

char *MallocAndCopy( char *line ) {

    char *pointer;
    if ( (pointer = malloc( strlen(line)+1 )) == NULL ) {
        printf( "Out of memory!!!  Goodbye!\n" );
        exit( 0 );
    }
    strcpy( pointer, line );

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

malloc返回一个指针,所以我理解为什么if条件中的"指针"不使用星号.但是,在strcpy函数中,它将行的CONTENTS发送到指针的CONTENTS.不应该是:

strcpy( *pointer, *line);
Run Code Online (Sandbox Code Playgroud)

????? 或者我对指针的理解是正确的,这只是strcpy函数的工作方式吗?

c pointers

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

目标C"做 - 而"

我正在阅读的书中的一个练习的示例显示以下代码:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int input, reverse, numberOfDigits;

    reverse = 0;
    numberOfDigits = 0;

    NSLog (@"Please input a multi-digit number:");
    scanf ("%i", &input);

    if ( input < 0 ) {
        input = -input;
        NSLog (@"Minus");
    }

    do {
        reverse = reverse * 10 + input % 10;
        numberOfDigits++; 
    } while (input /= 10);

    do {
        switch ( reverse % 10 ) {
        case 0:
            NSLog …
Run Code Online (Sandbox Code Playgroud)

objective-c do-while

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

基础SDK缺失?

我终于得到了新版本的Xcode和iOS4下载,并最终试图将我的第一个应用程序放到设备上.我正在完成配置文件,并且到了我需要打开Xcode的地步 - 然后在"设备"下拉菜单中所说的全部是"Base SDK Missing".

如果我转到"Project> Set Active SDK",我看到的所有内容都是灰色的字母,上面写着"Base SDK Missing".

iphone xcode

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

C中的随机访问函数问题

我正在努力学习C和我正在使用的书(Apress''Learn C')有一章在随机访问功能上非常混乱.以下代码令我困惑:

 int    GetNumberOfDinos( void ) {
    FILE    *fp;
    long    fileLength;

    if ( (fp = fopen( kDinoFileName, "r" )) == NULL )
        DoError( "Couldn't open file...Goodbye!" );

    if ( fseek( fp, 0L, SEEK_END ) != 0 )
        DoError( "Couldn't seek to end of file...Goodbye!" );

    if ( (fileLength = ftell( fp )) == -1L )
        DoError( "ftell() failed...Goodbye!" );

    fclose( fp );

    return( (int)(fileLength / kDinoRecordSize) );
}
Run Code Online (Sandbox Code Playgroud)

我理解代码的目的,但不了解如何实现该目的.fopen系列很容易理解.fseek和ftell是我的麻烦开始的地方.fseek的参数是文件,偏移量,然后是3个SEEK中的一个.为什么它的条件不是零呢?如果文件确实存在(kDinoFileName),并且他们想要指向该文件的末尾,为什么该位置为零?文件存在,有信息!然后我完全不明白ftell函数将如何以-1L结束?这个代码比它需要的更难吗?

c

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

iphone NSInteger问题

这似乎是如此基本但由于某种原因我不能让它工作 - 2个变量都定义为NSIntegers:

if ([AScore == "100"] && [BScore == "100"]) {
       ...
}
Run Code Online (Sandbox Code Playgroud)

这不起作用 - 当我拿走括号时它也不起作用 - 如果我试图实现'isEqualToString'命令也不行.我确信这是我犯的一个非常基本的错误.

iphone objective-c

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

另一个C指针问题

我以为我真的开始明白指针是如何工作的,然后我遇到了这个练习.我试图重新的代码块,我在我的"学习C"本书中,我得到了它做,这是工作,我认为一切是伟大的:

void PrintWords( char *line ) {

    bool inWord = false;

    while (*line != kByteZero) {

        if (! isspace(*line)) {

            if (inWord == false) {
                putchar('\n');
                inWord = true;

            }
            putchar(*line);
        } else {
            inWord = false; 
        }
        *line++;
    }
}
Run Code Online (Sandbox Code Playgroud)

它只是一个简单的函数,可以在不同的行上显示数组的单词.当我将它与书中的代码进行比较时,我看到了一个明显的区别.本书代码中的最后一行是'line ++'而不是'*line ++'.

我认为使用'line ++'与我们在这里尝试做的完全相反.我试图增加指针指向的位置,以及操纵存储在该内存地址的文件.'line ++'对我来说似乎很奇怪,因为我甚至不确定它告诉代码要做什么?从第[i]行移到第[i + 1]行?这似乎不可思议,因为那时"线"本身似乎只是作为一个指针 - 如果是这样的话,为什么我不能代替*线的每一个实例只用"行"?

c pointers

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

Objective-C"const"问题

维基百科称"const"是"......一种特殊的变量,其值在执行过程中通常不会被程序改变......"

如果是这种情况,为什么会这样:

const char *words[4] = { "aardvark", "abacus", 
                             "allude", "zygote" };

    *words = "first";
    words[1] = "second";

    int wordCount = 4;

    int i;
    for (i = 0; i < wordCount; i++) {
        NSLog (@"%s is %d characters long",
               words[i], strlen(words[i]));
    }
Run Code Online (Sandbox Code Playgroud)

有一个输出:"第一""第二""暗示""合子"(显然与长度等)

我认为"const"的重点是防止被修改的变量?

const objective-c

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

标签 统计

c ×5

objective-c ×3

iphone ×2

pointers ×2

const ×1

do-while ×1

python ×1

xcode ×1