只能打印一个字符,而不是字符串

时间:2015-12-13 20:44:47

标签: c arrays

我对阵列和打印字符串感到非常困惑。 我的程序中有一个小问题,它不打印字符串,只打印字符。

$app->get('/', function($request, $response, $args){
    $this->view->render($response, 'home.twig');
})->setName('home');

因此,当程序运行时,如果随机数等于A,则它可以正常工作,然后打印出A.但是,当数字!=到A时,它会崩溃并且不会打印出BE或CE。这是为什么?我使用过#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { char myarray[] = { 'A', 'A', 'BE', 'CE' }; srand(time(NULL)); char number; number = myarray[rand() % 4]; if (number == 'A') { printf("%c", number); } else { printf("%s", number); } return 0; } ,但我实际上看不到我的问题。

3 个答案:

答案 0 :(得分:1)

语句printf("%s", number);在运行时导致未定义的行为,因为%s要求相应的参数是指向char的指针,但是您没有提供指向{{1}的指针}。

(任何体面的编译器,明智地操作,都会告诉你这些不匹配的printf参数。)

这可能是你的意思:

char

答案 1 :(得分:1)

崩溃主要是由于这条线:

const char * a[] = { "A", "A", "BE", "BC" };

printf("%s", a[rand() % 4]);

使用不正确的格式说明符。 printf("%s", number); 用于打印c-string。但%s属于number

即使这样,它也可能不会产生您期望的输出,因为charBE是多字节字符常量,具有实现定义的行为。

相反,您可以使用指针数组:

CE

答案 2 :(得分:1)

您使用了int main() { ifstream file("text1.txt"); //open file if(!file) { /* file could not be opened */ } //and check whether it can be used std::map<std::string, float> com; std::string lastCom; //last command for use in "Repeat" std::string line; while (std::getline(file, line)) //read a line at once until file end { if(line.empty()) continue; //and continue if it is empty std::string tempCom; float tempVal; std::stringstream ss(line); //extract command and value ss >> tempCom; ss >> tempVal; if(tempCom == "Repeat") { com[lastCom] += tempVal; //add the value to the last command } else { com[tempCom] += tempVal; //add the value to the current command lastCom = tempCom; //and update last command } } } 的错误格式说明符。现代编译器会对此发出警告。 printf必须使用%c,而不是char

字符常量%s'BE'在分配给'CE'时的行为是实现定义的。它们可能会被截断为char或其他内容。

您的代码中没有字符串。字符串文字由双引号引入。