Tag: string literals

是不是有语法错误? 应该是printf(“一个”,两个和“”%s。\ n“,”三个“); 是有效的代码?

看看这段代码: #include #define _ONE “one” #define _TWO_AND “, two and ” int main() { const char THREE[6] = “three” ; printf(_ONE _TWO_AND “%s.\n”, THREE ); return 0; } printf有效: printf(“one” “, two and ” “%s.\n”, “three” ); 输出是: 一,二,三。 编译此代码后, gcc既没有错误也没有警告消息。 gcc编译器是否应该以这种方式工作,还是一个bug?

为什么将字符串文字传递给char *参数有时只是编译器错误?

我正在使用C和C ++程序。 我们曾经在没有make-strings-writable选项的情况下进行编译。 但那是一堆警告,所以我把它关掉了。 然后我得到了一堆forms的错误“无法将const char *转换为函数foo的argmuent 3中的char *”。 所以,我经历了很多修改来解决这些问题。 然而,今天,程序崩溃,因为文字“”被传递到一个期待char *的函数,并将第0个字符设置为0.它没有做任何坏事,只是试图编辑一个常量,并且崩溃。 我的问题是,为什么不是编译器错误? 如果它很重要,这是在使用gcc-4.0编译的mac上。 编辑:添加代码: char * host = FindArgDefault(“EMailLinkHost”, “”); stripCRLF(linkHost, ‘\n’); 哪里: char *FindArgDefault(char *argName, char *defVal) {// simplified char * val = defVal; return(val); } 和 void stripCRLF(char *str, char delim) { char *p, *q; for (p = q = str; *p; […]

函数返回的字符串文字的生命周期

考虑以下代码: const char* someFun() { // … some stuff return “Some text!!” } int main() { { // Block: A const char* retStr = someFun(); // use retStr } } 在函数someFun() , “Some text!!” 存储(我认为它可能在ROM的某个静态区域),它是什么 范围 一生? retStr指向的内存是否会在整个程序中占用,或者在块A退出后释放?

C – > sizeof字符串总是8

#include “usefunc.h” //don’t worry about this -> lib I wrote int main() { int i; string given[4000], longest = “a”; //declared new typdef. equivalent to 2D char array given[0] = “a”; printf(“Please enter words separated by RETs…\n”); for (i = 1; i sizeof(longest)) { longest = given[i]; } */ printf(“%lu\n”, sizeof(given[i])); //this ALWAYS RETURNS EIGHT!!! […]

字符串文字:指针与字符数组

在这个声明中: char *a = “string1” 什么是字符串文字? 是string1吗? 因为这个线程C和C ++中字符串文字的类型是什么? 说些不同的东西。 据我所知 int main() { char *a = “string1”; //is a string- literals allocated memory in read-only section. char b[] = “string2”; //is a array char where memory will be allocated in stack. a[0] = ‘X’; //Not allowed. It is an undefined Behaviour. For me, it […]