Skip to content

Latest commit

 

History

History
96 lines (77 loc) · 2.28 KB

README.md

File metadata and controls

96 lines (77 loc) · 2.28 KB

Note

//
//  ViewController.m
//  t
//
//  Created by LiuYanQi on 2018/5/15.
//  Copyright © 2018年 LiuYanQi. All rights reserved.
//

#import "ViewController.h"

struct Bar{
    char *x;
    int y;
};

struct test
{
    char* p_ch;
    int ix;
};

struct Bar funct(){
    struct Bar result;
    char *foo = malloc(sizeof(char) * 1024);
    snprintf(foo, 1024, "%s - %s\n", "foo", "bar");
    result.x = foo;
    result.y = 11;
    return result;
}

char * CSTR(int *inTextLength){
    char *foo = malloc(sizeof(char) * 1024);        /* buffer for 1024 chars */
    snprintf(foo, 1024, "%s - %s\n", "foo", "bar"); /* puts "foo - bar\n" in foo */
//    printf("%s", foo);                                    /* prints "foo - bar" */
    *inTextLength = 11;
    return foo;
}



@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
                                         /* frees mem from malloc */
    int inTextLength;
    
//    char *foo = CSTR(&inTextLength);
////    NSLog(@"%@",@(inTextLength));
////    NSString *s = [NSString stringWithUTF8String: foo];
////    free(foo);
//    NSString *s = [[NSString alloc] initWithBytesNoCopy:foo length:inTextLength encoding:NSUTF8StringEncoding freeWhenDone:NO];
//    
//    NSLog(@"%@",s);
    
//    struct Bar dunno = funct();
//    NSString *d = [[NSString alloc] initWithBytesNoCopy:dunno.x length:dunno.y encoding:NSUTF8StringEncoding freeWhenDone:YES];
//    NSLog(@"%@", d);
//    
    struct test *p_test;
    p_test = malloc(sizeof(struct test));
    p_test->p_ch = malloc(20);
    char *p_ch = malloc(20);
    snprintf(p_ch, 20, "%s - %s\n", "foo", "bar");
    strcpy(p_test->p_ch, p_ch);
    free(p_ch);
    p_ch = p_test->p_ch;
    NSString *s = [NSString stringWithUTF8String: p_ch];
    printf("p_test->p_ch:/t%s/n", p_test->p_ch);
    free(p_test->p_ch); //如果注释掉这行,p_ch值仍为“Hello!”
    free(p_test);
    printf("after free(p_test), p_ch:/t%s/n", p_ch);

}

- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
//    printf("%s", foo);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end